On Jan 25, 2014, at 11:45 PM, Martin Sloan wrote: > Blaine, > > Thanks for the post. The book I'm reading followed up the basic join example > (many-to-many) with a 'rich' join (has_many :through). From what I > understand there's a scenario for both and they're similar but there are > differences. In the book's example the articles and categories tables are > 'meeting up' at the articles_categories table and not 'going through' to > reference another table.
HABTM joins are used for "dumb" joins, where you want a two-way relationship between two tables that does not carry any further information about its connection. Most real-world connections aren't that dumb, and so the general advice is to use a HMT connection to "educate" that join. Person -> has many Clubs -> through Membership would be a simple example. Membership can have a member type picker, a date joined, date kicked out of the club for unsportsman-like conduct, whatever other "smart" attributes the real relationship might need to carry. Walter > > Thanks > > On Friday, January 24, 2014 4:39:28 PM UTC-5, Blaine LaFreniere wrote: > > On 1/24/14, 11:25 AM, Martin Sloan wrote: >> Hello, >> >> I'm new to Ruby/Rails and going through 'Beginning Rails 4'. In chapter 6 >> it has me create a join table for an articles and categories table >> (articles_categories). In the migrate file I've entered this code from the >> book: >> >> class CreateArticlesCategories < ActiveRecord::Migration >> def change >> create_table :articles_categories, :id=> false do |t| >> t.references :article >> t.references :category >> end >> end >> def self.down >> drop_table :articles_categories >> end >> end >> >> My issue is that after I migrate this file, when I try to make an >> association between the article and category object (article.categories << >> category) it spits an error that article_id does not exist in >> articles_categories table. It makes sense to me since the references above >> do no have _id appended in the class. If I change the class to the >> following, creating the relationship between article and category works fine: >> >> class CreateArticlesCategories < ActiveRecord::Migration >> def change >> create_table :articles_categories, :id=> false do |t| >> t.integer :article_id >> t.integer :category_id >> end >> end >> def self.down >> drop_table :articles_categories >> end >> end >> >> My question is, how can I get the 't.references' format to work so that AR >> looks for an 'articles' and 'categories' column, instead of the same with >> _id appended? > > You need to use has_many :through when working with join tables, not > has_and_belongs_to_many. The :through parameter specifies the join table. > > See this section of the Rails guide: > http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association > > -- > • Blaine LaFreniere > • Phone: 801-448-6124 > • E-mail: [email protected] > • Web: brlafreniere.com > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rubyonrails-talk/734daa7f-7ccb-40ea-bc5c-a81dfb4cb021%40googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/2D978A44-C343-4B23-B690-8B7C67C5AF48%40wdstudio.com. For more options, visit https://groups.google.com/groups/opt_out.

