gpt4 book ai didi

ruby-on-rails - 看似多余的 ActiveRecord has_many 定义

转载 作者:行者123 更新时间:2023-12-02 00:37:47 25 4
gpt4 key购买 nike

我一直在将 has and belongs to many 样式关联应用于我一直从事的项目,但是因为我想在我的连接模型中捕获额外信息,所以我隐式设置它通过更精细的 belongs_to/has_many 方法而不是 has_and_belongs_to_many 来实现。在最初遇到这个问题之后,我了解到我的模型 User 中需要这两个定义(在 Show 模型中也是如此):

has_many :saved_shows
has_many :shows, :through :saved_shows

一切正常,我的问题更多是关于 Rails 语法的设计,因为我想确保我没有错过这里的大局:为什么第一个是必要的?如果我们确定用户可以通过具有非标准名称 saved_shows 的中间体访问节目列表,为什么还要建立 has_many :saved_shows

我猜我不是第一个遇到这个问题的人,所以我很好奇为什么 Rails 需要这个看似多余的定义。仅仅是语法选择不当还是背后有更深层次的设计?

最佳答案

Rails 使用 :through 选项来引用您已经定义的另一个关联。我认为这样做是为了让您可以首先清晰地设置复杂的关联,而无需定义它们并在同一行中引用它们。

例如,考虑这个(不必要的复杂)示例:

has_many :users, :class_name => 'Person', :foreign_key => 'owner_id'
has_many :tasks, :through => :users, :class_name 'Job'

没有一种简洁的方式来内联表达所有这些信息。

此外(不确定您是否在问题中暗示这一点),您可以直接显式访问这两个关联。因此,如果用户 has_many :tasks,并且 has_many :milestones, :through => :tasks,您可以并且想要访问这两个@user.tasks@user.milestones

因此,它不仅对通过示例中或多或少的连接表有用(两个外键、时间戳,也许还有一两个属性)——您可以拥有使用 has_many 的大型模型:通过

这有助于回答您的问题吗?不确定您已经知道多少。

关于ruby-on-rails - 看似多余的 ActiveRecord has_many 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3922731/

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