我有一个应用程序,其中有几个嵌套模型......两个父模型和两个子模型。
我正在尝试为子模型创建评论,我让它对第一个模型非常有用,直到我意识到我必须为第二个孩子创建评论,所以我意识到我必须放弃我的工作,因为我的目标是第一个父母 +评论控制器中的子模型。所以我决定观看 Ryan Bates 的截屏视频(http://railscasts.com/episodes/154-polymorphic-association)关于创建属于多个模型的评论......不幸的是,它对我不起作用,我假设它是因为我正在尝试对子模型创建评论。我将向您展示我之前使用的对一个模型有效的东西,我将向您展示我现在正在做什么但不起作用...
这是我对评论控制器的看法
def create
@collection = Collection.find(params[:collection_id])
@design = @collection.designs.find(params[:design_id])
@comment = @design.comments.create(comment_params)
@comment.user = current_user
@comment.save
redirect_to collection_design_path(@collection, @design)
end
这就是我尝试实现它以适用于多个模型之后的样子
def create
@commentable = find_commentable
@comment = @commentable.comments.build(comment_params)
@comment.user = current_user
@comment.save
end
private
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
这是我的疯狂路线
resources :collections do
member do
post :like
post :unlike
end
resources :designs do
resources :comments
member do
post :like
post :unlike
end
end
end
有人对为多个嵌套模型创建的评论有任何其他不同的想法吗?在此先感谢您的帮助。
编辑:
这是我用于一个模型的表格
<%= form_for([@collection, @design, @design.comments.build]) do |f| %>
<%= f.text_area :comment %>
<%= f.submit "Comment", :class => "btn" %>
<% end %>
这是我现在正在使用的
<%= form_for([@collection, @design, @commentable, Comment.new]) do |f| %>
<%= f.text_area :comment %>
<%= f.submit "Comment", :class => "btn" %>
<% end %>
现在,当我尝试提交新的评论表单时,我收到此错误
undefined method `comments' for #<Collection:0x0000010150cf88>
它指向 create 方法
编辑 2
这是我的评论模型
belongs_to :commentable, :polymorphic => true
belongs_to :user
这是我的设计模型(它是集合模型的子模型)
has_many :comments, :dependent => :destroy, :as => :commentable
belongs_to :user
belongs_to :collection
和我的收藏模型(有子模型:设计)
belongs_to :user
has_many :designs, :dependent => :destroy
模型还有更多内容,但与问题无关。