gpt4 book ai didi

ruby-on-rails - 如何在 ruby​​ on rails 中创建类似 has_many 关联的 hibernate ?

转载 作者:行者123 更新时间:2023-12-02 15:54:32 24 4
gpt4 key购买 nike

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

我知道 spring 库正在使用 hibernate 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 中实现 hibernate has_many 关联(没有模型)?

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

提前致谢。

最佳答案

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

在 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.

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

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

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

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

如果您的应用程序仅共享身份验证,则设置两个应用程序都使用的 OAuth 身份验证提供程序可能更有意义。
  • https://schneide.wordpress.com/2014/03/10/using-rails-with-a-legacy-database-schema/
  • 关于ruby-on-rails - 如何在 ruby​​ on rails 中创建类似 has_many 关联的 hibernate ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35124104/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com