Rails has_many:通过#new不会在新记录上设置关联

时间:2018-09-11 23:18:26

标签: ruby-on-rails

根据Rails文档,可以使用has_many:through作为快捷方式:

  

has_many:through关联对于设置也很有用   通过嵌套的has_many关联进行“快捷方式”。例如,如果   文档有很多节,而一个节有很多段落,您可以   有时想要获得所有段落的简单集合   文献。

因此,我们假设有以下代码:

class User < ApplicationRecord
  has_many :sub_users
  has_many :settings
end

class SubUser < ApplicationRecord
  belongs_to :user
  has_many :settings, through: :user
end

class Setting < ApplicationRecord
  belongs_to :user
end

基于此,如果我运行user.settings.new,则会得到一个Setting设置为user_id的新user.id实例。

太好了。但是,如果我运行sub_user.settings.new,则会得到一个新的Setting实例,而该实例没有将user_id设置为sub_user.user.id

这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

我不会使用has_many through:delegate似乎是最好的主意https://apidock.com/rails/Module/delegate

class SubUser < ApplicationRecord
  belongs_to :user
  delegate :settings, to: :user
end

您当前的代码不是has_many through的用途,请检查停靠处,关系是否不同https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association