ruby on rails:如何在模型数组中删除逐列值
问题描述:
模型Cafe
有meal_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
多数民众赞成它,谢谢。
这不是问题的答案。问题是'如何删除元素?' – Ilya
@Ilya如果你再次正确地读取问题和代码,你会得到它的权利。 Sangwoo Park正在尝试搜索控制器中的记录,并且只想通过meal_available获得咖啡馆:true和scopes是更好的选择。 – sghosh968
删除只是拒绝与meal_available咖啡馆:错误的范围将在这些情况下更好地工作 – sghosh968