0

我正在尝试从我的数据库中检索汽车,其中每辆车都有制造商,并且可以有多种款式。

例如,福特嘉年华是双门轿车、轿车和掀背车。

我已经在我的模型中设置了我的关系,但现在我想创建一个查询来返回结果。查询构造将取决于提供的参数。

这是我到目前为止所拥有的

条件 = {}
条件[:manufacturer_id] = params[:manufacturer_id] 除非 params[:manufacturer_id].blank? # 这行得通!
条件[:style_id] = "style_id IN (?)", params[:style_ids] 除非 params[:style_ids].blank? #这打破了它:(

汽车 = Car.find(:all, :conditions=> 条件)
返回渲染:json =>汽车

返回的错误 PG::Error: ERROR: column cars.style_ids does not exit当然是因为 style_id 在名为cars_styles. 有没有办法告诉 ActiveRecord 在条件内查找哪个表?

这里的关键是我只想有一个控制器方法,它获取现有的参数,然后创建正确的查询。所以如果我没有manufacturer_id,它只会查询样式,反之亦然。当然,我稍后也会添加其他参数。

4

1 回答 1

0

我最终用这样的范围查询来做到这一点

范围 :from_manufacturer, lambda{|manu|{:joins => :manufacturer, :conditions => "manufacturers.id = #{manu}" }}
    范围 :from_style, lambda{|style|{:joins => :style, :conditions => "styles.id = #{style}"}}
    def self.get_cars(参数)
        范围=自我
        [:manufacturer,:style].each 做 |s|

            scope = scope.send("from_#{s}", params[s]) if params[s].present?

         结尾
        范围
    结尾

效果很好!

于 2012-12-13T06:10:40.470 回答