availables_locales
是一个postgres数组,其中包含一个语言环境列表。我想要做的就是让所有的房间让它的每个孩子都boxes
尊重这个条件。 (包含语言环境)
这就是我所得到的,但它只是作为,至少一个,而不是每个。
class Room
has_many :boxes
scope :available, -> { joins(:boxes).where('boxes.available_locales @> ?', "{#{I18n.locale}}") }
end
答案 0 :(得分:0)
如果任何房间至少有一个Box,请尝试反向条件,如:
class Box < ApplicationRecord
belongs_to :room
scope :not_locale_rooms do
select(:room_id)
.where.not('boxes.available_locales @> ?', "{#{I18n.locale}}")
end
end
class Room < ApplicationRecord
has_many :boxes
scope :with_all_locale_boxes, ->{ where.not(id: Box.not_locale_rooms) }
end
否则,您必须再向where
添加with_all_locale_boxes
以确保Room有一个方框。