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 <http://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/52E2DD90.4080406%40gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to