私はrailsとActiveRecordにかなり慣れていませんが、railsがUser.build_company
次のモデル設定のメソッドを生成しない理由を理解できません。
class User < ActiveRecord::Base
has_one :found_company
has_one :company, through: :found_company
end
class FoundCompany < ActiveRecord::Base
belongs_to :user
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :found_companies
has_many :users, through: :found_companies
end
これは、buildメソッドを呼び出そうとするとどうなるかです。
irb(main):035:0> user = User.all.first
?[1m?[36mUser Load (1.0ms)?[0m ?[1mSELECT "users".* FROM "users" ?[0m
=> #<User id: 1, email: "user@example.com" [...] uid: nil>
irb(main):036:0> user.build_company
NoMethodError: undefined method `build_company' for #<User:0x5bd50e0>
すべてに変更has_one: through
すると、期待どおりに機能します。has_many: through
class User < ActiveRecord::Base
has_many :found_companies
has_many :companies, through: :found_companies
end
user.companies.buildの呼び出しは正常に機能します。
irb(main):041:0> f.companies.build
=> #<Company id: nil, name: nil, created_at:
[...]
irb(main):041:0>
has_one: through
ビルダーメソッドが生成されないように見えるのはなぜですか?