筛选两个模型的范围

时间:2015-07-03 13:34:05

标签: ruby-on-rails scope

我的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) }

2 个答案:

答案 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