У меня есть 3 вложенных модели в приложении Rails:
class User < ApplicationRecord
has_many :products, dependent: :destroy
end
class Product < ApplicationRecord
belongs_to :user
has_one :insurance_policy
end
class InsurancePolicy < ApplicationRecord
belongs_to :product, -> { includes :user }
end
Я пытаюсь избежать выполнения:
InsurancePolicy.last.product.user
Используя добавление include к методу own_to, я получаюследующее сообщение об ошибке:
[10] pry(main)> InsurancePolicy.last.user
InsurancePolicy Load (0.4ms) SELECT "insurance_policies".* FROM "insurance_policies" ORDER BY "insurance_policies"."id" DESC LIMIT $1 [["LIMIT", 1]]
NoMethodError: undefined method `user' for #<InsurancePolicy:0x00007fc50a2d5a10>
from /Users/albert/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activemodel-5.2.0/lib/active_model/attribute_methods.rb:430:in `method_missing'
Почему отсутствует метод?Нужно ли добавлять столбец user_id в мою таблицу insurance_policies?
Я следую официальной документации AR.
class LineItem < ApplicationRecord
belongs_to :book, -> { includes :author }
end
class Book < ApplicationRecord
belongs_to :author
has_many :line_items
end
class Author < ApplicationRecord
has_many :books
end
Это то, чего мне не хватает?Я не очень понимаю это:
If you use the select method on a belongs_to association, you should also set the :foreign_key option to guarantee the correct results.