我有以下关联:
class ConferenceSession < ActiveRecord::Base
has_many :conference_sessions
end
class ConferenceSession < ActiveRecord::Base
belongs_to :conference
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :conference_sessions
end
和conference_sesssions_users
表。管理员可以允许特定人员参加特定会话。所以我想形成一个查询,每当用户登录并选择一个会议时,他应该只允许他看到管理员允许他访问的那些会话。我试过这个:
scope :visibility,
lambda { |user_id| joins(:conference_sessions_users).where('conference_sessions_users.user_id = ?' => user_id) }
但我收到错误ActiveRecord::ConfigurationError: Association named 'conference_sessions_users' was not found on ConferenceSession; perhaps you misspelled it?
可能出现什么问题?
答案 0 :(得分:2)
错误指的是范围的joins(:conference_sessions_users)
部分。对于joins
参数&#34;给定的符号应该与关联的名称匹配。&#34;
在这种情况下,您使用了联接表的名称。
要使用您需要的关联:joins(:user)
如果您只想使用连接表,可以使用字符串来定义连接:
joins("inner join conference_sessions_users
on conference_session_id = conference_sessions.id")