I''m still learning all the cool things about ActiveRecord. I''m currently stuck on figuring out how how to make this SQL query into something that uses some rails magic. # Current situation is I have two tables Entries Prizes class Entry < ActiveRecord::Base belongs_to :prize end class Prize < ActiveRecord::Base belongs_to :entry end My logic is that each entry ID has a matching prize ID. If you were to look up by prize.id you could find the winning entry using the same id. So if you were to do this in MYSQL it would look like this and you would get both table rows returned. # Current MySQL SELECT * FROM prizes LEFT JOIN entries ON prizes.id=entries.id WHERE prizes.id="2" What I''m looking to do is I want the equivalent of the above but returning active-record objects, so I could do some edits and save to both tables. # Attempt #1 Doesn''t work Prize.find(2).entry Any suggestions? --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 19 May 2008, at 15:49, newbie wrote:> > I''m still learning all the cool things about ActiveRecord. I''m > currently stuck on figuring out how how to make this SQL query into > something that uses some rails magic. > > # Current situation is I have two tables > Entries > Prizes > > class Entry < ActiveRecord::Base > belongs_to :prize > end > > class Prize < ActiveRecord::Base > belongs_to :entry > end > > > My logic is that each entry ID has a matching prize ID. If you were to > look up by prize.id you could find the winning entry using the same > id. So if you were to do this in MYSQL it would look like this and you > would get both table rows returned. >This isn''t what activerecord is expecting. belongs_to :prize tells active record that you entries table has a prize_id column containing the id of something in the prizes table (and similarly for entry). You probably could get this to sort of work like this with a :foreign_key => ''id'' option, but expect things to go very wonky if you try to delete the associated object, assign to the association etc... More generally, if id is an autoincrement column (which rails rather assumes) isn''t this going to be a source of endless pain? Fred> # Current MySQL > SELECT * FROM prizes LEFT JOIN entries ON prizes.id=entries.id WHERE > prizes.id="2" > > What I''m looking to do is I want the equivalent of the above but > returning active-record objects, so I could do some edits and save to > both tables. > > # Attempt #1 Doesn''t work > Prize.find(2).entry > > Any suggestions? > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I believe your Entry class should be: class Entry < ActiveRecord::Base has_one :prize end On 19 Mag, 17:08, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On 19 May 2008, at 15:49, newbie wrote: > > > > > > > I''m still learning all the cool things about ActiveRecord. I''m > > currently stuck on figuring out how how to make this SQL query into > > something that uses some rails magic. > > > # Current situation is I have two tables > > Entries > > Prizes > > > class Entry < ActiveRecord::Base > > belongs_to :prize > > end > > > class Prize < ActiveRecord::Base > > belongs_to :entry > > end > > > My logic is that each entry ID has a matching prize ID. If you were to > > look up by prize.id you could find the winning entry using the same > > id. So if you were to do this in MYSQL it would look like this and you > > would get both table rows returned. > > This isn''t what activerecord is expecting. belongs_to :prize tells > active record that you entries table has a prize_id column containing > the id of something in the prizes table (and similarly for entry). You > probably could get this to sort of work like this with a :foreign_key > => ''id'' option, but expect things to go very wonky if you try to > delete the associated object, assign to the association etc... More > generally, if id is an autoincrement column (which rails rather > assumes) isn''t this going to be a source of endless pain? > > Fred > > > # Current MySQL > > SELECT * FROM prizes LEFT JOIN entries ON prizes.id=entries.id WHERE > > prizes.id="2" > > > What I''m looking to do is I want the equivalent of the above but > > returning active-record objects, so I could do some edits and save to > > both tables. > > > # Attempt #1 Doesn''t work > > Prize.find(2).entry > > > Any suggestions?--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Okay. I see your point. So I''m guessing maybe I should create a tables called "entries_prizes" to keep track of which entries have a prize associated with them? In the end I just want to be able to query which entries have a prize associated with them BUT by looking it up using the entry ID. I hope I''m making sense, I think I''m making this harder then it needs to be. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 19 May 2008, at 17:21, newbie wrote:> > Okay. I see your point. So I''m guessing maybe I should create a tables > called "entries_prizes" to keep track of which entries have a prize > associated with them? In the end I just want to be able to query which > entries have a prize associated with them BUT by looking it up using > the entry ID. I hope I''m making sense, I think I''m making this harder > then it needs to be. >I think you are. You haven''t made clear the relationship between entries and prizes. You only really need a join table if entries can have several prizes and prizes can have multiple entries. Fred --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
The way it works is as a Entry.new gets created, an ID gets created with the Entry, let''s say ID="2". When the entry is about to be saved it does a lookup on the prizes tables (which are prepopulated) for the same corresponding ID="2". If it finds the same ID in the prizes table we have a winner. It''s easy to return the row using MySQL. #MySQL example SELECT * FROM prizes LEFT JOIN entries ON prizes.id=entries.id WHERE prizes.id="2" But I''m trying to do the same thing using Active record and I thought this example (see below) would work. # Doesn''t work Prize.find(2).entry --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 19 May 2008, at 17:46, newbie wrote:> > The way it works is as a Entry.new gets created, an ID gets created > with the Entry, let''s say ID="2". When the entry is about to be saved > it does a lookup on the prizes tables (which are prepopulated) for the > same corresponding ID="2". If it finds the same ID in the prizes table > we have a winner. It''s easy to return the row using MySQL. > > #MySQL example > SELECT * FROM prizes LEFT JOIN entries ON prizes.id=entries.id WHERE > prizes.id="2" > > But I''m trying to do the same thing using Active record and I thought > this example (see below) would work. >Like i said, that''s really not what rails is expecting belongs_to :entry, :foreign_key => ''id'' might work but it probably opens up the door for a lot of trouble. The rails way is to have a prize_id column. Fred> # Doesn''t work > Prize.find(2).entry > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Then I''ll follow rails convention over configuration. Thanks for the help. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---