I’ve been learning Rails for about 6 weeks now, so still a noob!
I’m following Ryan Bates screencast on Polymorphic Associations, but I’m getting a “No Route Matches” error when navigating to /model/xx/comments.
After two days going round in circles with this I’m totally stumped—everything appears to be in place.
Comments model:
create_table "comments", :force => true do |t|
t.text "content"
t.integer "user_id"
t.integer "commentable_id"
t.string "commentable_type"
t.datetime "created_at"
t.datetime "updated_at"
end
Comments class:
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
Other models class:
class ModelName < ActiveRecord::Base
has_many :comments, :as => :commentable
end
Routes.rb
resources :modelname, :has_many => :comments
comments_controller.rb
def index
@commentable = find_commentable
@comments = @commentable.comments
end
private
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
This all according to the tutorial, but nonetheless is returning “no route matches”.
I have tried alternative formatting of the routes as nested resources.
resources :modelname do |modelname|
modelname.resources :comments
end
Explicitly defining comments in routes.rb
resources :comments
And various combinations of terms in routes.rb
resources :modelname, :has_many => :commentables
or
resources :modelname, :has_many => :comments
or
resources :modelname, :has_many => :comments, :through => :commentable
all without success.
Has anyone else encountered this? I’m lost as to where to begin looking.
Many thanks
If you’re using Rails 3, routing is done differently. You specify relationships in the model and map your routes in routes.rb
In the Rails 3 way of doing things, your routes.rb you should have this:
You should not be specifying your relationships in routes. Refresh your server and you should get a route like /model/id/comments/id