2013-03-03 105 views
0

我有一個Filter類用於過濾轉租列表。在我的過濾器類中,我有一個Listing方法,該方法返回符合用戶在表單中輸入的條件的所有列表。這是過濾器類。Rails查詢數組是否包含其他數組

class Filter < ActiveRecord::Base 

    attr_accessible :air_conditioning, :available_rooms, :bathrooms, :furnished, :negotiable, :new, :parking, :maximum_price, :private_bathroom, :show, :term, :total_rooms, :utilities, :washer_dryer 
    serialize :term 

    def listings 
    @listings ||=find_listings 
    end 

private 

    def find_listings 
    listings=Listing.order(:price) 
    listings=listings.where("listings.price <= ?", maximum_price) if maximum_price.present? 
    listings=listings.where(total_rooms: total_rooms) if total_rooms.present? 
    listings=listings.where(available_rooms: available_rooms) if available_rooms.present? 
    listings=listings.where(bathrooms: bathrooms) if bathrooms.present? 
    listings=listings.where(term: term) 
    listings=listings.where(furnished: furnished) 
    listings=listings.where(negotiable: negotiable) 
    listings=listings.where(utilities: utilities) 
    listings=listings.where(air_conditioning: air_conditioning) 
    listings=listings.where(parking: parking) 
    listings=listings.where(washer_dryer: washer_dryer) 
    listings=listings.where(private_bathroom: private_bathroom) 
    listings 
    end 

end 

有問題是行

listings=listings.where(term: term) 

期限保存爲可序列化的字符串。 Aka ['Summer','Fall]用戶選中複選框以選擇可以使用哪些條款。但是,where子句每次都失敗。如何檢查用戶選擇的元素是否包含在列表條款中?

回答

0

我不確定你打算如何處理術語,但是你能把它變成一個字符串類型,然後使用類似的東西嗎?

TERMS = %w(Spring Summer Fall Winter) 
validates :term, :inclusion => { :in => TERMS } 

編輯:另外,你打算有過濾器實際上是在你的數據庫中的表,或只是一個驗證模型?如果是後者,你可能需要考慮使用ActiveModel:http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/

+0

這不是一個查詢,雖然 – 2013-03-03 21:42:01

+0

你是對的,這不是一個查詢。當您嘗試運行您發佈的代碼時,您會得到什麼錯誤?列表模式是什麼樣的?由於它是Ruby對象的序列化字段,因此您可能無法在類似的SQL查詢中使用它。但是你可以在從數據庫中得到結果後進行過濾,例如: listings.find_all {| l | l.include? term} – Ari 2013-03-03 21:46:51

相關問題