Область Rails 4 имеет_and_belongs_to_many, определяемую сквозной таблицей

#sql #ruby-on-rails #activerecord

#sql #ruby-on-rails #activerecord

Вопрос:

В настоящее время у меня есть таблица locations и users с объединяющей таблицей locations_users.

 class Location < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :locations
end
  

location.users теперь они работают корректно. Чего я хотел бы достичь, так это чего-то вроде: location.members

В прямом SQL это дает то, что я ищу:

 select * from locations l left outer join locations_users lu on lu.location_id=l.id left outer join users u on lu.user_id=u.id where l.location_id=1 and lu.member=true;
  

Комментарии:

1. Попытка с этим Location.includes(:locations_users, :users).where(locations_users.location_id => location.id,locations_users.user_id => user.id,locations_users.member => 'true') не проверялась.

2. Вы пытались добавить HABTM с таким условием: has_and_belongs_to_many :members, class_name: "User", join_table: "locations_users", -> { where('users.member = ?', true) }

3. @VinhBS должен работать, но обратите внимание, условие должно быть первым — has_and_belongs_to_many :members, -> { ... }, ...

4. Ваш вопрос подразумевает, что ( lu.member = true ) у вас есть member столбец в вашей locations_users таблице. Вместо этого вы должны использовать has_many through отношение. Таблицы соединения HABTM содержат только ссылки.

5. Спасибо @DamienRoche, у меня есть две ветки, пытающиеся использовать каждый способ.