2016-02-14 54 views
0

模型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 

它沒有工作。如何刪除數組中的模型列的元素?

回答

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 
1

你可以把一個範圍在咖啡館模型來獲得與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