删除嵌套属性时未允许的属性_destroy

Mik*_*keW 4 ruby-on-rails

关注railscast#196但使用Rails 4 - 我在尝试从问题父模型中删除答案时遇到了问题.

未允许的参数:_destroy

_answer_fields.html.erb

<fieldset>                                                                                                                                                                                                  
    <%= f.text_field :response %>                                                                                                                                                                       
    <%= f.hidden_field :_destroy %>                                                                                                                                                                                                                                                                                                                                                                                 
    <%= link_to "remove" , "#", class: "remove_fields" %>                                                                                                                                               
</fieldset>      
Run Code Online (Sandbox Code Playgroud)

question.rb

accepts_nested_attributes_for :questions, :allow_destroy => true   
Run Code Online (Sandbox Code Playgroud)

surveys_controller.rb

def survey_params                                                                                                                                                                                       
  params.require(:survey).permit(:name, :questions_attributes => [:id, :content, :answers_attributes => [:id, :response]])                                                                              
end 
Run Code Online (Sandbox Code Playgroud)

我正在删除表单上的字段点击罚款,但记录尚未删除.

谢谢

编辑: JS设置隐藏变量

 jQuery ->                                                                                                                                                                                                   
        $(document).on 'click' , ".remove_fields" , (event) ->                                                                                                                                              
                $(this).prev('input[type=hidden]').val('1')                                                                                                                                                 
                $(this).closest('fieldset').hide()                                                                                                                                                          
                event.preventDefault()  
Run Code Online (Sandbox Code Playgroud)

msa*_*ler 6

@Hitham S. AlQadheeb可能是对的 - 检查你的模型是否正确......

survey.rb

class Survey < ActiveRecord::Base
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions
end
Run Code Online (Sandbox Code Playgroud)

问题.rb

class Question < ActiveRecord::Base
  belongs_to :survey
  has_many :answers, :dependent => :destroy
  accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
Run Code Online (Sandbox Code Playgroud)

Unpermitted parameters: _destroy然而,错误实际上应该是指你的控制器对强参数的实现:survey_params.您需要告诉rails您的表单将通过该:_destroy字段.试试这个:

def survey_params                                                                                                                                                                                       
  params.require(:survey).permit(:name, :questions_attributes => [:id, :content, :_destroy, :answers_attributes => [:id, :response, :_destroy]])                                                                              
end
---------------------------------------------------------------------------------^
-------------------------------------------------------------------------------------------------------------------------------------^
Run Code Online (Sandbox Code Playgroud)