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

Kir*_*til 10 nomethoderror ruby-on-rails-5

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

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

控制器参数如下.

在2016-10-04 20:09:36开始POST"/ traumas/create_multiple"for 127.0.0.1 +0530由TraumasController处理#create_multiple作为JS
参数:{"utf8"=>"✓","fields"=> [ {"contusions"=>"1","burns"=>"","at_scene"=>"在场景","emergency_detail_id"=>"96","trauma_region"=>"后仰"}, "提交"=> "提交"}

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

  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
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.

提前致谢.

基兰.

Tat*_*ton 11

参数:

{"fields"=>[{"contusions"=>"1", "burns"=>"", "at_scene"=>"At Scene", "emergency_detail_id"=>"96", "trauma_region"=>"Head-Back"}]}
Run Code Online (Sandbox Code Playgroud)

对象的安全列表数组,需要“字段”属性:

def trauma_params
  params.permit(fields: [
   :contusions,
   :burns,
   :at_scene,
   :emergency_detail_id,
   :trauma_region
  ])
  .require(:fields)
end
Run Code Online (Sandbox Code Playgroud)

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


Kir*_*til 8

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

编辑

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

参数:{"fields"=> [{"contusions"=>"1","burns"=>"","at_scene"=>"在场景","emergency_detail_id"=>"96","trauma_region"= >"Head-Back"}],"commit"=>"提交"}

我们可以做的:

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
Run Code Online (Sandbox Code Playgroud)

  • @JosephN.Rails 5现在返回`ActionController :: Parameters`,因此不需要该调用.第三行现在看起来像:`p.permit(`. (3认同)