Rails 3:转换会话[:params]以更正activerecord查询

时间:2011-09-26 10:09:50

标签: ruby-on-rails-3 activerecord

我有两个模型,Foo和Bar,具有相同的属性,并且我将'用户“搜索参数”缓存到会话变量中,结果变成这样:

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

我想在FooBar中搜索与此查询匹配的条目。

现在,我正在做:

@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)

真的很难。

有人能告诉我一个更好/更正确的方法吗?

提前致谢。

修改

另外,session[:search_params]中的一些“0”的参数在数据库中实际上是“假的”(布尔值)(由复选框填充),所以我必须在这个字段中做一些“转换” query已正确完成,即获取air_conditioner => 'false'而不是air_conditioner => '0'

2 个答案:

答案 0 :(得分:0)

您可以使用基于动态属性的查找器:api

所以

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

此外,您不必从session删除无关信息。

答案 1 :(得分:0)

如果我是你,我不会走那条路。我会选择像https://github.com/ernie/meta_search

这样的解决方案