从表格中过滤活动记录

时间:2017-11-16 10:16:33

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

我有两张桌子:餐厅和餐厅

restaurant has_many mealsmeal belongs_to restaurant。 因此,每餐都有restaurant_id列。

我的控制器中有一个@meals_search变量,它是搜索栏中搜索用户的一份用餐清单。

我想显示与@meals_search.restaurant_id对应的餐馆,但到目前为止,我无法找到正确的ActiveRecord查询。

例如,如果@meals_search.pluck(:restaurant_id)等于[1,7,44,53],那么我想创建一个@restaurants变量来存储id为1,5,44和53的餐馆。

我填充@meals_search变量,如下所示:

meals_controller.rb

@meals_search = @meals.search(params[:search])

model.meal.rb

  belongs_to :restaurant

def self.search(search)
  if search
    where('name LIKE ?', "%#{search}%")
  else
    all
  end
end

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你只需要这样做:

override func sizeForItem(at index: Int) -> CGSize {
    calculateDimensions()
    let size = CGSize(width: collectionContext!.containerSize.width, height: sectionHeight)
    return size
}

这使用ActiveRecord subset conditions

上述查询转换为:

@restaurants = Restaurant.where(id: @meals_search.pluck(:restaurant_id))

答案 1 :(得分:1)

如果我理解你的问题,你想要这样的东西吗?

@restaurants = Restaurant.where(id: @meals_search.pluck(:restaurant_id))

答案 2 :(得分:1)

您还可以使用map

pluck内容
@restaurants = Restaurant.where(id: @meals_search.map {|m| m.restaurant_id})