ruby on rails:如何在模型数组中按列值删除元素

时间:2016-02-14 07:12:44

标签: ruby-on-rails arrays ruby

模型Cafemeal_available,其boolean类型。

搜索咖啡馆时,我想按类别重新搜索复选框:

<form action="/cafe/cafesearch" method="GET">
<label for="chk1"><input type="checkbox" id="chk1" name="meal_available" value=true>meal_available</label>
<input type="submit" value="submit">
</form>

在视图中,通过表单标记传递复选框值,在控制器中,我尝试这样:

coffee = Cafe.all
if params[:meal_available] == true
  @cafe = coffee.delete_if{|x| x.meal_available == false}
end

它没有用。如何删除数组中的模型列?

2 个答案:

答案 0 :(得分:1)

您可以在咖啡馆模型中放入一个范围,以便为咖啡馆提供meal_available,有关ActiveRecord范围的更多信息here

在咖啡馆模型中:

class Cafe < ActiveRecord::Base
  scope :meals_available, -> { where(meal_available: true) }
end

在控制器中:

@cafes = Cafe.meals_available

就是这样,谢谢。

答案 1 :(得分:0)

您只能使用ActiveRecord方法:

if params[:meal_available] == true
  @cafe = Cafe.where(meal_available: false)
end

在这种情况下,coffee = Cafe.all是多余的。

coffee = Cafe.all
if params[:meal_available] == true
  @cafe = coffee.select { |x| x.meal_available == false }
end