ruby-on-rails – 在Rails中创建多态关联的表单

我有几个课程,每个可以有评论
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

如何为新的电影评论创建表单?我补充说@H_404_5@

resources :movies do
    resources :comments
end

到我的routes.rb,并尝试过new_movie_comment_path(@movie),但这给了我一个包含commentable_id和commentable_type [我想自动填充,不直接由用户输入]的表单.我也尝试自己创建表单:@H_404_5@

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

(其中“文本”是注释表中的一个字段)
但这也不行.@H_404_5@

我根本不知道如何将评论与电影联系起来.例如,@H_404_5@

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

似乎没有创建与id为1的电影相关联的评论.(Movie.find(1).comments返回一个空数组.)@H_404_5@

解决方法

当您在模型中创建了多态关联时,您不必担心该视图中的多态关联.您只需在“注释”控制器中执行此操作.
@movie = Movie.find(id) # Find the movie with which you want to associate the comment
@comment = @movie.comments.create(:text => "This is a comment") # you can also use build
# instead of create like @comment = @movie.comments.create(:text => "This is a comment")
# and then @comment.save
# The above line will build your new comment through the movie which you will be having in
# @movie.
# Also this line will automatically save fill the commentable_id as the id of movie and 
# the commentable_type as Movie.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...