Creating forms for polymorphic associations in Rails

Viewed 10494

I have a couple classes that can each have comments:

class Movie < ActiveRecord::Base
    has_many :comments, :as => :commentable
end

class Actor < ActiveRecord::Base
    has_many :comments, :as => :commentable
end

class Comment < ActiveRecord::Base
    belongs_to :commentable, :polymorphic => true
end

How do I create a form for a new movie-comment? I added

resources :movies do
    resources :comments
end

to my routes.rb, and tried new_movie_comment_path(@movie), but this gives me a form containing commentable_id and commentable_type [which I want to be populated automatically, not entered by the user directly]. I also tried creating the form myself:

form_for [@movie, Comment.new] do |f|
    f.text_field :text
    f.submit
end

(where "text" is a field in the Comment table) but this doesn't work either.

I'm not actually sure how to associate a comment with a movie at all. For example,

c = Comment.create(:text => "This is a comment.", :commentable_id => 1, :commentable_type => "movie") 

doesn't seem to create a comment associated to the movie with id 1. (Movie.find(1).comments returns an empty array.)

2 Answers
Related