如何在 rails 上的 ruby 中创建类似于 has_many 的休眠关联?

How to create hibernate like has_many association in ruby on rails?

我正在 rails 应用程序上开发一个 ruby,我需要使用 grails 应用程序开发的现有数据库。在那个 grail 应用程序中,他们使用 spring security oauth2 库。

我了解到 spring 库正在使用休眠 ORM,而我的 rails 应用程序正在使用 ActiveRecord ORM。在hibernate中has_many关联如下:

class OAuthClient {

    private static final String NO_CLIENT_SECRET = ''

    transient springSecurityService

    String clientId
    String clientSecret

    Integer accessTokenValiditySeconds
    Integer refreshTokenValiditySeconds

    Map<String, Object> additionalInformation

    static hasMany = [
            authorities: String,
            authorizedGrantTypes: String,
            resourceIds: String,
            scopes: String,
            redirectUris: String
    ]

}

在上面的示例中,has_many 声明将创建没有任何域模型的关联表。

但在 rails 中,我们需要创建两个模型,例如:

class A < ActiveRecord::Base
  has_many :bs,
end

class B< ActiveRecord::Base
  belongs_to :a
end

在Rails(没有模型)中实现休眠has_many关联有什么解决方案吗?

注意:我没有将 "B" 模型用于任何单独的操作。

提前致谢。

简而言之 - 不。 那不是 Rails 和 ActiveRecord 的工作方式。在 ActiveRecord 中,每个模型都对应一个数据库 table。

在 ActiveRecord 中,关系存在于模型之间——这就是 AR 如何知道如何连接以及如何处理它从数据库中提取的数据。与 hibernate 不同,AR 中的关系不仅仅是一个数组——而是它们是延迟加载的范围,AR 需要连接模型来启用对关系的反射。

a = thing.accessories # a lazy loading scope
a = a.where(color: 'Blue') # adds a condition to the scope
a.to_a # fetches from the DB. 

一般来说,模型是 Rails MVC 风格中最重要的部分,所以我真的看不出绕过它们有什么具体好处。

如果你想在一个记录数据上存储一堆辅助数据,几个RDBMS系统有ARRAY、HSTORE和JSON等数据类型。但是,就 AR 而言,这些被视为单个列,而不是 has_many 关系。

然而,在这种情况下,您可以使用遗留数据库——但这并不意味着您的对象关系映射需要与 Hibernate 相匹配。这只是意味着您需要做更多的配置来告诉 ActiveRecord 您如何建模映射到架构和外键等。

但是,除非您需要 rails 与遗留应用程序共享数据库,否则迁移数据库通常更明智,以便它遵循 rails 约定。

如果您的应用程序仅共享身份验证,则设置两个应用程序都使用的 OAuth 身份验证提供程序可能更有意义。