2012-09-28 58 views
0

我有一個模型Phonechecked_by字段;如果這個字段等於1,那麼我們知道這個電話是未檢查,否則(> 1) - 檢查。在管理方面,我可以審查Phones名單,我需要使用meta_search審查創建一個過濾器:Rails meta_search在一個組合框中的條件越來越少

  • 所有手機
  • 經過
  • 未選中

我可以看到checked_by_greater_than,或checked_by_less_than meta_search中的方法,但如何將這些方法合併到一個選擇框中?

在任何建議感謝

回答

1

隨着範圍和化妝領域。

範圍:

class Phone < ActiveRecord::Base 

    scope :checked, lambda { |value| 
     !value.zero? ? checked_by_greater_than(1) : where(:checked_by => 1) 
    } 

end 

然後添加一個選擇框有三個值,返回[nil, 0, 1]作爲值,並在你的控制器使用該參數來應用新的範圍。

class PhonesController < ApplicationController 

    def index 

    # ... 
    @phones ||= Phone.scoped 
    checked_select_value = params.delete("checked_select") # here use the name of your form field 
    if checked_select_value.present? 
     @phones = @phones.checked(checked_select_value.to_i) 
    end 
    # now apply the rest of your meta-search things to the @phones 

    # 
    end 
end 
+0

不能將範圍應用於'Phone.all',但我明白了,謝謝 –

+0

非常歡迎。 – rewritten

+0

順便說一句,您可以使用'Phone.scoped',它將表現爲Phone.all'除了能夠應用範圍。 – rewritten