有三种模型用户表属性是name:string,age:integer,kind:integer。注册表属性为user_id:integer、tutor_id:integer、event_id:integer、favorite:boolean。事件表属性为name:string。这里的用户类型可以是student、tutor或tutor_student
# user.rb
class User < ApplicationRecord
enum kind: { student: 0, tutor: 1, tutor_student: 2 }
has_many :registrations
has_many :tutors, through: :registrations
has_many :favorites, -> { where(registrations: { favorite: true }) }, through: :tutors, source: :event, class_name: 'Event'
end
# Event.rb
class Event < ApplicationRecord
has_many :registrations, foreign_key: :program_id
has_many :users, through: :registrations
has_many :tutors, through: :registrations
end
# registration.rb
class Registration < ApplicationRecord
belongs_to :user
belongs_to :tutor, class_name: 'User'
belongs_to :event
end
字符串
问题是
我试图通过有许多关系,如上面的虚拟数据样本,我给了用户事件最喜欢的导师
user.tutors.favorites
型
但我得到了这个错误
undefined method `favorites' for #<User::ActiveRecord_Associations_CollectionProxy:0x00007f04e8a7b540>
型
谁能帮我纠正一下我的联想。
2条答案
按热度按时间acruukt91#
关于你得到的错误,你得到
undefined method
的原因是因为从技术上讲,你是在一个用户集合上调用.favorites
,而不是单个用户。您可以通过使用以下命令访问用户导师的收藏夹:
字符串
l7mqbcuq2#
也许我完全误解了你的问题,但是:第一个月