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