带注释的嵌套模型

时间:2013-09-12 19:34:50

标签: ruby-on-rails comments ruby-on-rails-4 nested-attributes railscasts

我有一个应用程序,其中有几个嵌套模型......两个父模型和两个子模型。

我试图在儿童模特上创作评论,我让它在第一部作品上运作得很好,直到我意识到我必须为第二个孩子创作评论,所以我意识到我不得不放弃我的工作,因为我是定位评论控制器中的第一个父+子模型。因此,我决定观看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>

指向创建方法

编辑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

并且模型还有更多,但它与问题无关。

0 个答案:

没有答案