Hi, I am a bit confused about managing the relationship between two of my tables: I have developed a script using scRUBYt that scrapes data from a website and dumps the following four fields into my Shows table: class CreateShows create table :shows do |t| t.string :date t.string :venue t.string :info t.string :comics The second table I created is called Theatres: class CreateTheatres create table :theatres do |t| t.string :name t.string :address t.string :website_url t.string :location The :venue field in the Shows table corresponds to the :name field in the Theatres table. How do I set up a relationship whereby Theatres have many shows, while defining this (:venue - :name) relationship as the link? I have tried the :set_primary_key & :foreign_key => ... methods without success. Does the primary or foreign key always have to be an integer? Any suggestions would be much appreciated.. -- 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-/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 21 Feb 2009, at 13:22, Ad Richards wrote:> > Hi, > > I am a bit confused about managing the relationship between two of my > tables: > > I have developed a script using scRUBYt that scrapes data from a > website > and dumps the following four fields into my Shows table: > > class CreateShows > create table :shows do |t| > t.string :date > t.string :venue > t.string :info > t.string :comics > > The second table I created is called Theatres: > > class CreateTheatres > create table :theatres do |t| > t.string :name > t.string :address > t.string :website_url > t.string :location > > The :venue field in the Shows table corresponds to the :name field in > the Theatres table. How do I set up a relationship whereby Theatres > have > many shows, while defining this (:venue - :name) relationship as the > link? > > I have tried the :set_primary_key & :foreign_key => ... methods > without > success. > Does the primary or foreign key always have to be an integer? >A belongs_to relationship has to go through the primary key of the other model and setting the primary key of theatres to be the name would be a bad thing (eg what if two towns had a theatre by the same name). The rails way would be to do away with the venue column and have a theatre_id one instead> Any suggestions would be much appreciated.. > -- > 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-/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 -~----------~----~----~----~------~----~------~--~---
Thanks Fred, I took your advice and added a theatre_id column to the Shows table. Then I added the following callback to the Shows model, in order to automatically update the :theatre_id column with the id of the corresponding theatre in the Theatres table. class Show < ActiveRecord::Base belongs_to :theatre after_create :build_theatre_ids def build_theatre_ids t = Theatre.find_by_name(self.venue) self.update_attributes(:theatre_id => t.id) rescue nil end end And it works a treat! -- 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-/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 -~----------~----~----~----~------~----~------~--~---