2013-03-03 3 views
0

У меня есть класс Filter, который я использую для фильтрации списков подписок. В моем классе фильтра у меня есть метод Листинг, который возвращает все списки, которые соответствуют критериям, введенным пользователем в форме. Вот класс фильтра.Rails Query, если Array содержит другое Array

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) 

Term сохраняется в виде строки, которая может быть сериализации. Aka ['Summer', 'Fall] Пользователь проверяет флажки, чтобы выбрать, для каких терминов доступен сублет. Однако, что предложение where терпит неудачу каждый раз. Как я могу проверить, содержатся ли элементы, выбранные пользователем, в терминах для листинга?

ответ

0

Я не уверен, что вы намеревались делать с термином, но можете ли вы просто сделать его строковым типом, а затем использовать что-то вроде этого?

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

EDIT: Кроме того, вы намерены иметь фильтр на самом деле быть таблица в базе данных, или просто модель с валидаций? Если последнее, вы можете посмотреть на использование ActiveModel: http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/

+0

Это не запрос, хотя –

+0

Вы правы, это не вопрос. Какая ошибка возникает при попытке запустить код, который вы опубликовали? Как выглядит схема листинга? Поскольку это сериализованное поле для объекта Ruby, вы, вероятно, не можете использовать его в SQL-запросе. Но вы можете отфильтровать его после получения результатов из базы данных, примерно так: listings.find_all {| l | l.include? срок } – Ari