6.3. Defining Associations

That doesn't look too good, now, does it? The problem lies in the fact that the app\views\comments\new.html.erb template that's generated by scaffold expects Comment model objects to have an article method. This is not automatically the case because you have not specified an association between the Article and Comment models. To do that, edit the Article model to include the following highlighted line:

class Article < ActiveRecord::Base
  has_many :comments

  # ... other existing code ...
end

Similarly, the Comment model, located in app\models\comment.rb, should look like the following:

class Comment < ActiveRecord::Base
  belongs_to :article
end

Starting with Rails 2.2 belongs_to is automatically populated for you when scaffolding. In earlier versions it had to be manually specified.

The highlighted lines employ methods to define associations between models that in turn represent relationships between the respective tables in the database. In this case, you defined a one-to-many relationship between Article and Comment.

As you can see, the syntax of these associated methods is very straightforward. Each of them receives a symbol that indicates the associated object (plus optional arguments). They end up reading like common speech: an article "has many comments" and a comment "belongs to an article."

Notice how the symbol passed to the has_many method is plural, whereas the argument for belongs_to is singular. Other association methods are has_one (for one-to-one ...

Get Ruby on Rails® for Microsoft Developers now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.