Louis-Pierre Dahito
2010-Apr-25 01:01 UTC
SQL error... :joins and :order in ActiveRecord find command
Hi guys!
There''s a problem I''m dealing with since 2 days now and I
haven''t quite
figured out what''s wrong in my code.
Here it is...
Suppose I''ve got a pretty simple blogging app which has stories and
comments.
The comments belong to the stories...
Here''s the code:
#app/model/story.rb
class Story < ActiveRecord::Base
has_many :comments
end
#app/model/comment.rb
class Comment < ActiveRecord::Base
belongs_to :story
end
#config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.resources :stories, :has_many => :comments
map.connect '':controller/:action/:id''
map.connect '':controller/:action/:id.:format''
end
Now here''s the problem...
Fetching records with the following command doesn''t work:
Comment.find :all, :joins => :story, :conditions => {:stories => {:id
=>
1}}, :order => "created_at DESC"
It gives me the following error message:
ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column
name: created_at: SELECT "comments".* FROM "comments"
INNER JOIN
"stories" ON "stories".id = "comments".story_id
WHERE ("stories"."id" 1) ORDER BY created_at DESC
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in
`log''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in
`execute''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb:417:in
`catch_schema_changes''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in
`execute''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb:320:in
`select''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in
`select_all_without_query_cache''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in
`select_all''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:661:in
`find_by_sql''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1548:in
`find_every''
from
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:615:in
`find''
from (irb):1
What I''ve I done wrong?
Now, let''s say i run the same command but omit to specify the :order
statement just works fine!
Comment.find :all, :joins => :story, :conditions => {:stories => {:id
=>
1}}
=> [#<Comment id: 1, story_id: 1, body: "some text", created_at:
"2010-04-24 23:10:48", updated_at: "2010-04-24
23:10:48">, #<Comment id:
2, story_id: 1, body: "some text 2", created_at: "2010-04-24
23:10:52",
updated_at: "2010-04-24 23:10:52">, #<Comment id: 3, story_id:
1, body:
"some text 3", created_at: "2010-04-24 23:10:55",
updated_at:
"2010-04-24 23:10:55">, #<Comment id: 4, story_id: 1, body:
"some text
4", created_at: "2010-04-24 23:10:58", updated_at:
"2010-04-24
23:10:58">]
I''m running Rails 2.3.5 and using as you guys can see, SQLite3 for
development.
By the way, everything works fine with MySQL...
Need your help guys,
Thx a lot
LP
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Michael Pavling
2010-Apr-25 08:00 UTC
Re: SQL error... :joins and :order in ActiveRecord find command
On 25 April 2010 02:01, Louis-Pierre Dahito <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Hi guys! > > There''s a problem I''m dealing with since 2 days now and I haven''t quite > figured out what''s wrong in my code. > > Fetching records with the following command doesn''t work: > > Comment.find :all, :joins => :story, :conditions => {:stories => {:id => > 1}}, :order => "created_at DESC" > > It gives me the following error message: > > ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column > name: created_at:That error is telling you everything you need to know - there is more than one "created_at" column in your query''s selected fields. So you need to specify which one to use for the order: Comment.find :all, :joins => :story, :conditions => {:stories => {:id => 1}}, :order => "comments.created_at DESC" Hope that helps. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Louis-Pierre Dahito
2010-Apr-25 19:28 UTC
Re: SQL error... :joins and :order in ActiveRecord find command
> Comment.find :all, :joins => :story, :conditions => {:stories => > {:id => 1}}, :order => "comments.created_at DESC" > > Hope that helps.Thx a lot @Michael!! You saved the day! LP -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.