在RubyonRails SQL请求中使用:include&:条件?

在RubyonRails SQL请求中使用:include&:条件?,sql,ruby-on-rails,ruby,request,Sql,Ruby On Rails,Ruby,Request,嘿,我在想办法 我想让所有的购物车都有一个购物车阶段。阶段等于'35',这是一个单独的表和购物车有许多阶段 cart_舞台台有点像 id--购物车\购物车id--舞台 1 ---- 123 ----- 20 2 ---- 123 ----- 35 3---102---35 我现在正在尝试: # Cart model has_one :top_stage, :foreign_key => 'cart_id', :class_name => "CartStage", :order

嘿,我在想办法

我想让所有的购物车都有一个购物车阶段。阶段等于'35',这是一个单独的表和购物车有许多阶段

cart_舞台台有点像

id--购物车\购物车id--舞台 1 ---- 123 ----- 20 2 ---- 123 ----- 35 3---102---35

我现在正在尝试:

# Cart model
  has_one :top_stage, :foreign_key => 'cart_id', :class_name => "CartStage", :order => 'stage'

# Cart controller
  @carts = Cart.find :all, :order => 'created_at DESC', :include => :top_stage, :conditions => ["top_stage.stage = ?", 35]  
这给了我:

SQLite3::SQLException: no such column: top_stage.stage: SELECT DISTINCT "carts".id FROM "carts" WHERE (top_stage.stage = 35)  ORDER BY created_at DESC LIMIT 40 OFFSET 0
希望这一切都有意义,我们将非常感谢您的帮助


亚历克斯

这可能是:

@carts = Cart.find(:all, :order => 'carts.created_at DESC', :include => :top_stage, :conditions => { "cart_stages.stage" => 35 })
请记住,您在条件中使用表的名称,而不是关联的名称,但是在include选项中使用关联的名称

只要有可能,您可能应该使用哈希方法来表示条件,以保持声明的简单性。当您需要复杂的OR>类型逻辑时,阵列样式才被证明是必要的

对于Rails 3,更好的表达方式是:

@carts = Cart.order('carts.created_at DESC').include(:top_stage).where('top_stages.stage' => 35)

不清楚为什么您的cart_stages表没有添加联接。

任何包含文字SQL的地方,都需要使用实际的表名和列名,而不是Rails关联名。所以你需要有::conditions=>[cart_stage.stage=?,35]而不是top_stage

我自己设法解决了这个问题。。我想要的是-

@carts = Cart.find :all, :order => 'created_at DESC', :joins => :top_stage, :conditions => { :cart_stages => { :stage => 35 } }

谢谢大家的帮助

您使用的是什么版本的rails?这给了我:SQLite3::SQLException:没有这样的列:cart\u stages.id:SELECT carts。。。。您将如何使用连接,我对ruby中的DB请求有点经验!我正在使用Railsv2.3.8顺便说一句!谢谢你迄今为止的帮助!顺便说一句,SQL错误消息较长,但我无法全部发布,因为它太长,无法放入框中!