当Rails应该是Create时,它正在寻找更新

时间:2015-02-12 22:02:54

标签: ruby-on-rails ruby ruby-on-rails-4

我试图在我的收藏展示页面上发表评论表。我对Rails有点生疏,我不知道为什么这个表单没有尝试创建评论而是返回错误

  

动作'更新'找不到CommentsController

评论系统在控制台中运行。

这是我的表格

<%= form_for [@commentable, @comment] do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <%= f.text_area :content %>
    <%= f.submit "Comment", class: "btn btn-large btn" %>
  <% end %>

我的评论模型

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

我的收藏模型

class Collection < ActiveRecord::Base
    has_many :comments, as: :commentable
end

我的comments_controller

class CommentsController < ApplicationController

  def create
    @comment = @commentable.comments.new(comment_params)
    if @comment.save
         flash[:success] = 'Comment posted!' 
      redirect_to @commentable
    else 
      flash[:notice] = "Error creating comment: #{@comment.errors}" 
      redirect_to @commentable
    end 
  end 

  private
    def comment_params
        params.require(:comment).permit(:content, :commentable_type, :commentable_id, :user_id)
    end
end

我的collections_controller显示操作

def show
    @collection = Collection.find(params[:id])
    @commentable = @collection
    @comments = @commentable.comments
    @comment = Comment.new if user_signed_in?
end

2 个答案:

答案 0 :(得分:1)

您未在表单或控制器中使用@commentable,这可能会导致您的问题:

<%= form_for [@commentable, @comment] do |f| %>

您的控制器操作应如下所示:

def create
  @comment = @commentable.comments.new(comment_params)

更新:然后根据资源加载可评论:

before_filter: load_commentable

def load_commentable
  resource, id = request.path.split('/')[1, 2]
  @commentable = resource.singularize.classify.constantize.find(id)
end

方法由Ryan Bates提供:http://railscasts.com/episodes/154-polymorphic-association-revised

答案 1 :(得分:1)

您能否显示呈现该表单的控制器操作?我认为问题是@comment已经被持久化/创建,因此它会尝试更新它。

更新:

我刚注意到你的表演动作。是的问题是@comment已经存在。只需将其更改为:

@comment = Comment.new if user_signed_in?