【问题标题】:Where clause rails -- using two ModelsWhere 子句 rails -- 使用两个模型
【发布时间】:2015-11-21 17:08:00
【问题描述】:

不确定执行此操作的最佳方法 - 我有一个 where 子句,我需要使用两个模型才能获得自动完成的列表结果。我有一个“会员”模型,其中包含“用户”参考或“会员”参考(user_id 为 nil 或 member_id 为 nil,但不能同时包含两者)。

我需要列出 current_user 的用户名和成员名,如果不是 nil 或 member_id,则分别提取 user_id。

我尝试在 where 子句中添加 &&,但它似乎不起作用

 User.where(id:  current_user.memberships.pluck(&:user_id)) && Member.where(id: current_user.memberships.pluck(&:member_id)

我怎样才能完成这项工作并使其成为 Railsy?

【问题讨论】:

  • 你的 && 表示你想加入 2 个查询或其他什么?
  • “它似乎不起作用” 并不是很有帮助。什么不起作用?你有错误吗?
  • 是的。我需要列出成员和用户的名称,具体取决于 user_id 或 member_id 在成员资格记录中是否有引用 - 我需要将它们列为一个集合。
  • 这里的关系是什么,你能解释一下吗:例如:用户有很多成员,Membership属于一个成员,MemberShip属于一个用户?
  • @mike0416 你能试试我的答案,让我知道这是否适合你吗?如果没有,请告诉我你想要什么。我会尝试更新我的答案。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2


【解决方案1】:

这应该给你你想要的:

current_memberships = current_user.memberships
user_names = User.where('users.id in ?', current_memberships.pluck(:user_id).compact.uniq)
                 .select('users.name')
                 .map(&:name)
member_names = Member.where('members.id in ?', current_memberships.pluck(:member_id).compact.uniq)
                     .select('members.name')
                     .map(&:name)

# concat the array of user names and member names
user_names + member_names

【讨论】:

  • 唯一的麻烦,结果是一个数组而不是活动关系。
  • 是的,它会给你一个名字数组。那么,您想要活动记录关系吗?
  • 这不是我的问题,但我有意见,主动关系是更好的选择:)
  • 这有效@KMRakibulIslam - 这是我的解决方案,使用AR:用户:user_name = User.order(:first_name).where("first_name like ?", "%#{params[:term]}%").where(id: current_user.memberships.pluck(:invited_id)) 成员:member_name = Member.order(:first_name).where("first_name like ?", "%#{params[:term]}%").where(id: current_user.memberships.pluck(:member_id)) 然后连接user_name + member_name Hrmm.. 不知道如何正确格式化这个抱歉。
  • 感谢链接compact 方法的建议!
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多