Rails基于条件的habtm查询

时间:2017-03-31 07:44:10

标签: ruby-on-rails activerecord associations has-and-belongs-to-many

我有以下关联:

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?

可能出现什么问题?

1 个答案:

答案 0 :(得分:2)

错误指的是范围的joins(:conference_sessions_users)部分。对于joins参数&#34;给定的符号应该与关联的名称匹配。&#34;

在这种情况下,您使用了联接表的名称。

要使用您需要的关联:joins(:user)

如果您只想使用连接表,可以使用字符串来定义连接:

joins("inner join conference_sessions_users
       on conference_session_id = conference_sessions.id")