ruby​​ on rails:如何在模型数组中删除逐列值

问题描述:

模型Cafemeal_available,它有boolean类型。ruby​​ on rails:如何在模型数组中删除逐列值

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

<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 

它没有工作。如何删除数组中的模型列的元素?

可以使用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 

你可以把一个范围在咖啡馆模型来获得与meal_available的咖啡馆,在ActiveRecord的更多信息作用域here

在咖啡馆模型:

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

在控制器:

@cafes = Cafe.meals_available 

多数民众赞成它,谢谢。

+0

这不是问题的答案。问题是'如何删除元素?' – Ilya

+0

@Ilya如果你再次正确地读取问题和代码,你会得到它的权利。 Sangwoo Park正在尝试搜索控制器中的记录,并且只想通过meal_available获得咖啡馆:true和scopes是更好的选择。 – sghosh968

+0

删除只是拒绝与meal_available咖啡馆:错误的范围将在这些情况下更好地工作 – sghosh968