我有以下查询,我想知道如何在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时,所有属于职员的用户都应返回
答案 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的用户列表。