Таблица соединений фильтра Rails во время запроса - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть следующий запрос, который я хотел бы знать, как выполнить в 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"

Я не хочу менятьсяэто конкретное отношение, поскольку мне не требуется таблица объединения в качестве модели, однако я хочу фильтровать пользователей, используя столбец персонала в таблице объединения (true или false)

В идеале все пользователи, которые являются сотрудниками, должнывернуться, когда я позвоню в Shop.staff

1 Ответ

0 голосов
/ 21 декабря 2018

Я создал небольшой проект, чтобы заново сделать то, что у вас есть,

Вот как это сделать:

Пользователь: 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, которое вернет список пользователей, помеченныхкак персонал магазина.

...