无法批量分配嵌套属性?

时间:2014-02-17 17:13:03

标签: ruby-on-rails

我正在尝试分配belongs_to答案的评论(并回答has_many评论),并且无法分配大量受保护的属性:answer。

这是我的commentsController

class CommentsController < ApplicationController
 def create
  @answer = Answer.find(params[:answer_id])
  @comment = @answer.comments.new(params[:comment])
  @comment.save
  redirect_to question_path(@answer)
 end

这是我正在使用的页面的答案控制器

def show
 @answer = Answer.find(params[:id])
 @comment = @answer.comments.new(params[:comment])
end

我的答案模型accepted_nested_attributes用于评论。

这是我的表格,

<%= form_for([@answer, @comment]) do |f| %>
  <p>
  </p>
  <p>
    <%= f.label :comment %>
    <%= f.text_area :answer, :cols => "50", :rows => "30"%>
  </p>
  <p>
    <%= f.submit "Submit Comment" %>
  </p>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你应该在你的评论控制器中使用它之前允许使用params,在rails4中你可以这样做

class CommentsController < ApplicationController
    def create
        @answer = Answer.find(params[:answer_id])
        @comment = @answer.comments.new(params.require(:comment).permit(:answer))
        @comment.save
        redirect_to question_path(@answer)
    end
end

或者您也可以在注释控制器中定义一个允许参数的方法

def comment_params
   params.require(:comment).permit(:answer)
end

然后在您的控制器中使用此函数创建一个新记录as-

@comment = @answer.comments.new(comment_params)
@comment.save

正如你所说的那样,在回答类似

的问题时,你已经嵌套了评论
class Answer < ActiveRecord::Base
   has_many :comments, dependent: :destroy
   accepts_nested_attributes_for :comments
end

你也在使用attr_accessible所以允许以嵌套形式使用params你必须这样做

attr_accessible :comments_attributes以及答案中的答案.rb