0

サブレットリストをフィルタリングするために使用しているFilterクラスがあります。私のフィルタークラスには、ユーザーがフォームに入力した基準に一致するすべてのリストを返すListingメソッドがあります。これがフィルタークラスです。

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)

用語は、シリアル化できる文字列として保存されます。別名['Summer'、'Fall]ユーザーはチェックボックスをオンにして、サブレットを使用できる用語を選択します。ただし、そのwhere句は毎回失敗します。ユーザーが選択した要素がリストの条件に含まれているかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

0

term で何をするつもりだったのかわかりませんが、文字列型にしてからこのようなものを使用できますか?

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

編集: また、 Filter を実際にデータベース内のテーブルにするつもりでしたか、それとも検証のあるモデルにするつもりでしたか? 後者の場合、ActiveModel の使用を検討することをお勧めします: http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/

于 2013-03-03T21:33:40.787 に答える