我正在开发一个允许用户对单个“作品”发表评论的应用程序(请考虑博客文章)。 模型中的关联如下:

class User < ActiveRecord::Base
  has_many :works  
  has_many :comments

class Work < ActiveRecord::Base
  belongs_to :user
  has_many :comments


class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
  belongs_to :work

在注释表中,一条记录具有以下字段:

ID内容
用户身份
created_at
Updated_at
work_id

在我的Comments控制器中,我有以下创建操作:

def create
    @work = Work.find(params[:id])
    @comment = @work.comments.create(params[:comment])
    @comment.user = current_user
    if @comment.save
      #flash[:success] = "Post created!"
      redirect_to root_url
    else
      render 'activities'
    end
  end

我正在尝试将用户和工作都与评论关联,但是在尝试创建评论时收到以下错误消息:

Unknown action

The action 'update' could not be found for CommentsController

我正在尝试使用以下StackOverflow答案作为指南,但该解决方案不适用于我: 在Rails 3中为单个记录使用多个外键?

编辑:我在works#show动作上有一个添加评论表单:

def show 
  @work = Work.find(params[:id])
  @comment = current_user.comments.create(params[:comment])
  @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all
  @comments = @work.comments.order("created_at DESC").where(work_id: @work ).all 
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @work }
    end
  end

评论表单本身:

<%= form_for(@comment) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, placeholder: "Post a comment!" %>
  </div>
  <%= f.submit "Post", class: "btn btn-small btn-primary" %>
<% end %>

我在Comments控制器上也有一个更新方法:

def update
     @comment = current_user.comments.find(params[:id])
    if @comment.update_attributes(params[:comment])
      flash[:success] = "Comment updated"
      redirect_to @comment
    end
  end

===============>>#1 票数:0

错误消息显示:

The action 'update' could not be found for CommentsController

因此,问题在于您的表单正在尝试在CommentsController上调用update操作。 这与将UserWork实例都添加为外键无关。 您的代码似乎正确。

===============>>#2 票数:0

确保在show操作期间是否将注释保留到数据库中:

@comment = current_user.comments.create(params[:comment])

然后,表单助手将构建一个更新表单而不是一个创建表单(因为该模型已经存在):

<%= form_for(@comment) do |f| %>

如果所需的操作是在显示页面上发布评论,然后尝试在显示操作中build评论:

@comment = current_user.comments.build(params[:comment])

  ask by winston translate from so

未解决问题?本站智能推荐: