查询期间的Rails过滤器联接表

时间:2018-12-21 04:45:05

标签: ruby-on-rails ruby join many-to-many

我有以下查询,我想知道如何在Rails 5中执行

SELECT users.id, users.first_name, users.last_name, users.image, users.email, memberships.staff 
FROM users 
LEFT JOIN memberships
ON memberships.shop_id = 1
WHERE memberships.staff = false

我想要一种模型方法,例如

Shop.staff

使用.joins()没有成功

联接表具有

user_id | shop_id | staff
1       | 2       | false
2       | 2       | true

在我的商店模型中,我有:

has_and_belongs_to_many :users, join_table: "memberships"

我不想更改这种特殊的关系,因为我不需要将联接表作为模型,但是我想通过使用联接表中的人员列(真或假)来过滤用户

理想情况下,当我致电Shop.staff时,所有属于职员的用户都应返回

1 个答案:

答案 0 :(得分:1)

我已经创建了一个小项目来重新做你拥有的东西,

这里是制作模型的方法:

用户:user.rb

class User < ApplicationRecord
  has_many :memberships
  has_many :shops, through: :memberships
end

商店:shop.rb

class Shop < ApplicationRecord
  has_many :memberships
  has_many :users, through: :memberships

  def staff
    return users.joins(:memberships).where(memberships: { staff: true })
  end
end

会员资格:membership.rb

class Membership < ApplicationRecord
  belongs_to :user
  belongs_to :shop
end

您必须执行类似Shop.first.staff的操作,该操作将返回标记为Shop Staff的用户列表。