在更新操作中执行构建时,ActiveModel :: ForbiddenAttributesError

时间:2015-05-18 18:43:38

标签: ruby-on-rails-4 activemodel

我得到一个讨厌的ActiveModel :: ForbiddenAttributesError,我找不到如何修复它。

我正在遵循本指南: https://rbudiharso.wordpress.com/2010/07/07/dynamically-add-and-remove-input-field-in-rails-without-javascript/ 一切都很好,除非我更新记录。

我的控制器:

if params[:add_item]
  # rebuild the baixa_itens attributes that doesn't have an id
  unless params[:baixa][:baixa_itens_attributes].blank?
    for attribute in params[:baixa][:baixa_itens_attributes]
      @baixa.baixa_itens.build(attribute.last.except(:_destroy)) unless attribute.last.has_key?(:id)
    end

(...)

    # Never trust parameters from the scary internet, only allow the white list through.
    def baixa_params
      params.require(:baixa).permit(:prontuarios_id, :data, :profissional_id, :comentario, baixa_itens_attributes: [ :id, :item_id, :quantidade, :preco, :_destroy ])
    end
end

当我遇到崩溃时,我在控制台中测试了它:

>> attribute
=> ["1", {"item_id"=>"3", "quantidade"=>"1", "preco"=>"1", "_destroy"=>"0"}]
>> attribute.last.except(:_destroy)
=> {"item_id"=>"3", "quantidade"=>"1", "preco"=>"1"}
>> @baixa.baixa_itens.build(attribute.last.except(:_destroy))
!! #<ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError>

但是,如果我尝试手动编译,它可以工作:

>> @baixa.baixa_itens.build({"item_id"=>"3", "quantidade"=>"1", "preco"=>"1"})
=> #<BaixaItem id: nil, baixa_id: 6, item_id: 3, quantidade: 1, preco: #<BigDecimal:7ff97147b6f8,'0.1E1',9(18)>, created_at: nil, updated_at: nil>
>>

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题

for attribute in params[:baixa][:baixa_itens_attributes].permit!

在我的控制器中(不使用!会给我错误:“未经许可的参数:0,1”,我无法理解)

我仍然希望有更好的解决方案。