我有两个模型,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)
真的很难。
有人能告诉我一个更好/更正确的方法吗?
提前致谢。
修改
另外,session[:search_params]
中的一些“0”的参数在数据库中实际上是“假的”(布尔值)(由复选框填充),所以我必须在这个字段中做一些“转换” query
已正确完成,即获取air_conditioner => 'false'
而不是air_conditioner => '0'
。
答案 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)