Hi, I am having troubles to figure out how to move from one record to the other without using <find_by_sql> or other ugly tricks. So far, I have managed to do a lot of stuff without it but I decided that I need to learn how it works this weekend! So I need your help to figure that out... I have the following 4 models: class Client < ActiveRecord::Base has_many :client_variations has_many :variations, :through => :client_variations end class ClientVariation < ActiveRecord::Base belongs_to :client belongs_to :variation end class Variation < ActiveRecord::Base belongs_to :concept has_many :client_variations, :dependent => :destroy end class Concept < ActiveRecord::Base has_many :variations, :order =>"id", :dependent => :destroy end How can I get one of the Concept record associated with a specific Client? So far I have this: temp = clients(:air_canada).variations.concept.find(:all, limit => 1) But I get this error: NoMethodError: undefined method `concept'' for Variation:Class Any help would be great because I am tired to hacking AR by using SQL calls.. Thanks! -- Posted via http://www.ruby-forum.com/.
Alain Pilon wrote:> Hi, > > I am having troubles to figure out how to move from one record to the > other without using <find_by_sql> or other ugly tricks. So far, I have > managed to do a lot of stuff without it but I decided that I need to > learn how it works this weekend! So I need your help to figure that > out... > > I have the following 4 models: > > class Client < ActiveRecord::Base > has_many :client_variations > has_many :variations, :through => :client_variations > end > > class ClientVariation < ActiveRecord::Base > belongs_to :client > belongs_to :variation > end > > class Variation < ActiveRecord::Base > belongs_to :concept > has_many :client_variations, :dependent => :destroy > end > > class Concept < ActiveRecord::Base > has_many :variations, :order =>"id", :dependent => :destroy > end > > How can I get one of the Concept record associated with a specific > Client? So far I have this: > > temp = clients(:air_canada).variations.concept.find(:all, limit => 1) > > But I get this error: > NoMethodError: undefined method `concept'' for Variation:Class > > Any help would be great because I am tired to hacking AR by using SQL > calls.. > > Thanks! > >The above is failing (I think) because clients(:air_canada).variations has (or could have) more than one result and therefore returns an array of Variation objects, and is equivalent to Variation.find(:all, :conditions => [#some condition]).concept Are you trying to get all concepts that belong to variations owned by air_canada clients? If so, I''m wondering if include might help here. Something (untested, but the console is your friend on these sorts of things) like: temp = clients(:air_canada).variations.find(:all, :include => :concept) If you do this query in the console it''s dump the result on screen and you should then be able to see how to extract the concepts. HTH
Alain Pilon
2006-May-20 13:35 UTC
[Rails] Re: Navigation between DB Items with active Record
Thanks Chris, you were right, the problem was caused by an array. I figure it out last night before going to bed and forgot it during the night until I saw your post ;-) Thanks! Since I was only interested in getting the first Variation, I put: first_concept = clients(:air_canada).variations[0].concept and do an assert_not_nil to make sure it exist. Thanks again! -- Posted via http://www.ruby-forum.com/.
Alain Pilon wrote:> Thanks Chris, > > you were right, the problem was caused by an array. I figure it out last > night before going to bed and forgot it during the night until I saw > your post ;-) Thanks! > > Since I was only interested in getting the first Variation, I put: > > first_concept = clients(:air_canada).variations[0].concept > > and do an assert_not_nil to make sure it exist. > > Thanks again! > >No prob. I had a similar thing earlier in the week where it became clear after a good night''s sleep