NoMethodError(#array的未定义方法`permit':0x007f51c020bd18>

时间:2016-10-04 14:58:16

标签: ruby-on-rails-5 nomethoderror

我收到此错误并使用Rails 5。

  

NoMethodError(未定义的方法permit' for #<Array:0x007f51cf4dc948> app/controllers/traumas_controller.rb:99:in trauma_params'   app / controllers / traumas_controller.rb:25:在`create_multiple'

控制器参数如下所示。

  

在2016-10-04开始为127.0.0.1发布POST“/ traumas / create_multiple”   20:09:36 +0530由TraumasController处理#create_multiple作为JS
  参数:{“utf8”=&gt;“✓”,“fields”=&gt; [{“contusions”=&gt;“1”,“burns”=&gt;“”,   “at_scene”=&gt;“在场景中”,“emergency_detail_id”=&gt;“96”,   “trauma_region”=&gt;“Head-Back”}],“commit”=&gt;“提交”}

我正在尝试在控制器中创建如下记录:

  def create_multiple
    trauma_params
    params[:fields].each do |values|
       u = Trauma.create(values)
    end
  end

def trauma_params
        params.require(:fields).permit(:fields => [])
end

请帮我解决此问题。

提前致谢。

基兰。

2 个答案:

答案 0 :(得分:8)

我通过引用这个(https://github.com/rails/strong_parameters/issues/140)github问题来解决它。

修改

对于以下参数(在Array中):

  

参数:{&#34;字段&#34; =&gt; [{&#34; contusions&#34; =&gt;&#34; 1&#34;,&#34;烧伤&#34; =&gt; &#34;&#34 ;,   &#34; at_scene&#34; =&gt;&#34;在场景&#34;,&#34; emergency_detail_id&#34; =&gt;&#34; 96&#34;,   &#34; trauma_region&#34; =&gt;&#34; Head-Back&#34;}],&#34;提交&#34; =&gt;&#34;提交&#34;}

我们可以这样做:

def trauma_params
  params.require(:fields).map do |p|
    ActionController::Parameters.new(p).permit(
      :contusions,
      :burns,
      :at_scene,
      :emergency_detail_id,
      :trauma_region
    )
  end
end

答案 1 :(得分:2)

参数:

{"fields"=>[{"contusions"=>"1", "burns"=>"", "at_scene"=>"At Scene", "emergency_detail_id"=>"96", "trauma_region"=>"Head-Back"}]}

列入白名单的对象数组,必须具有“字段”属性:

def trauma_params
  params.permit(fields: [
   :contusions,
   :burns,
   :at_scene,
   :emergency_detail_id,
   :trauma_region
  ])
  .require(:fields)
end

来源:https://edgeguides.rubyonrails.org/action_controller_overview.html#nested-parameters