开发者

using :include && :conditions in a ruby on rails SQL request?

Hey I'm trying to figure something out..

I want to get all Carts that have a cart_stage.stage equal to '35' (this is a separate table and a cart has many stages)

the cart_stage table is a bi开发者_如何学运维t like

id ----- cart_id ----- stage

1 ------- 123 ---------- 20

2 ------- 123 ---------- 35

3 ------- 102 ---------- 35

I am trying this at the moment:

# 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]  

This gives me :

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

Hope it all makes sense and any help would be greatly appreciated,

Alex


That should probably be:

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

Remember that you use the name of the table in the conditions, not the name of the association, however you do use the name of the association in the include option.

Whenever possible, you should probably use the hash method for expressing conditions to keep your declarations simple. It's when you need complicated OR or > type logic that the array-style proves necessary.

A better way of expressing it for Rails 3 is:

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

It's not clear why your cart_stages table isn't being added with a JOIN.


Anywhere that you include literal SQL, you need to use the real table and column names, not the Rails association names. So you need to have: :conditions => ["cart_stage.stage = ?", 35] instead of top_stage


I managed to work it out my self actually.. What I wanted was -

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

Thanks for all the help guys! :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜