【问题标题】:ActiveRecord conditions across multiple tables.跨多个表的 ActiveRecord 条件。
【发布时间】:2012-12-11 06:16:15
【问题描述】:

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

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

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

这就是我目前所得到的

条件 = {} 条件[:manufacturer_id] = params[:manufacturer_id] 除非 params[:manufacturer_id].blank? # 这行得通! conditions[: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,它只会查询样式,反之亦然。当然,我稍后也会添加其他参数。

【问题讨论】:

    标签: activerecord join conditional-statements


    【解决方案1】:

    我最终使用这样的范围查询来完成此操作

    范围 :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? 结尾 范围 结尾

    效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多