我的Rails应用程序中有一个属于 Hotels 的 Maps 集合。我希望使用状态过滤所有地图。这使用以下范围:
scope :status, -> (status) {where status: status}
我希望将所有属于酒店的地图排除在X的状态之外。这就是我尝试过的,但我没有运气。我在酒店模型中有以下范围:
scope :exclude, -> (status) {where.not(status: status)}
这就是我在地图模型中尝试的内容:
scope :status, -> (status) {where(status: status) && Hotel.exclude(1) }
答案 0 :(得分:0)
我不确定你的关系,但请尝试:
Map.status(map_status).joins(:hotel).merge(Hotel.exclude(hotel_status))
在地图中:
scope :choose_name, ->(map_status, hotel_status) { status(map_status).joins(:hotel).merge(Hotel.exclude(hotel_status)) }
然后Map.choose_name(map_status, hotel_status)
答案 1 :(得分:0)
我不确定,但我认为你可以这样做:
class Map < ActiveRecord::Base
scope :exclude, -> (status) {
joins(:hotel).where(Hotel.arel_table[:status].not_eq(status))
}
end