基于条件的Rails关联查询

Posted

技术标签:

【中文标题】基于条件的Rails关联查询【英文标题】:Rails association query based on condition 【发布时间】:2017-04-07 08:36:55 【问题描述】:
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_session_users 表。管理员可以允许特定的人参加特定的会议。所以我想形成一个查询,每当用户登录并选择一个会议时,他应该被允许只看到管理员允许他看到的那些会话。

我这样做是为了获得特定的会话

scope :visibility,
    lambda  |user_id| joins('INNER JOIN conference_sessions_users 
                              ON conference_sessions_users.conference_session_id = conference_sessions.id').
                              where('conference_sessions_users.user_id = ?', user_id) 

但这只会返回特定的人,如果会话对所有用户可见怎么办,相同的条件应该是什么。

【问题讨论】:

【参考方案1】:

您可以将条件更改为where(conference_sessions_users: user_id: user_ids),这将转换为如下内容:WHERE conference_sessions_users.user_id in (1st_id, 2nd_id)。当然,在这种情况下,您应该将 id 数组传递为 user_id

【讨论】:

【参考方案2】:

使用合并是一个很好的案例

https://apidock.com/rails/ActiveRecord/SpawnMethods/merge

【讨论】:

以上是关于基于条件的Rails关联查询的主要内容,如果未能解决你的问题,请参考以下文章

Rails N + 1查询问题时获取与where条件关联的记录

由关联计数组成的 Rails 查询,最好使用范围

ActiveRecord - 查询关联中最后一个元素的条件

Rails 3 查询接口:使用关联模型

Rails 查询关联的模型范围

ruby on rails (模型关联查询)