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.

Reply via email to