Rails 3: преобразовать сессию [: params] в правильный запрос activerecord - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть две модели, Foo и Bar, с одинаковыми атрибутами, и я «кэширую» пользовательские «параметры поиска» в переменную сеанса, которая заканчивается примерно так:

session[:search_params] => {"price"=>"15.0", "air_conditioner"=>"0", "fireplace"=>"0", "number_of_rooms"=>"1", "balcony"=>"0"} 

Я бы хотел найти в Foo и Bar записи, соответствующие этому запросу.

Сейчас я делаю:

@foo = Foo.new(session[:search_params])
search_attributes = @foo.attributes
search_attributes.delete 'id'
search_attributes.delete 'created_at'
search_attributes.delete 'updated_at'
@results = Foo.where(search_attributes)
@results += Bar.where(search_attributes)

это действительно ужасно.

Может кто-нибудь сказать мне лучше / правильный путь?

Заранее спасибо.

EDIT

Кроме того, некоторые параметры в session[:search_params], которые равны «0», на самом деле являются «ложными» в базе данных (логические значения) (заполнены флажками), поэтому я должен выполнить некоторое «преобразование» в эти поля, чтобы query сделано правильно, то есть, например, air_conditioner => 'false' вместо air_conditioner => '0'.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Я бы не пошел по этому пути на твоем месте. Я хотел бы пойти с решением, как https://github.com/ernie/meta_search

0 голосов
/ 26 сентября 2011

Вы можете использовать динамические искатели на основе атрибутов: api .

Так что

@results = Foo.find_by_price_and_air_conditioner_and_fireplace_and_number_of_rooms_and_balcony(session[:search_params])

Кроме того, вам не придетсяудалить постороннюю информацию из session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...