web-dev-qa-db-ja.com

NoMethodError(#<Array:0x007f51c020bd18>の未定義のメソッド `permit '

このエラーが発生し、Rails 5を使用しています。

NoMethodError(未定義のメソッドpermit' for #<Array:0x007f51cf4dc948> app/controllers/traumas_controller.rb:99:intrauma_params'app/controllers/traumas_controller.rb:25:in `create_multiple '

コントローラのパラメータは以下のとおりです。

開始POST "/ traumas/create_multiple" for 127.0.0.1 at 2016-10-04 20:09:36 +0530 TraumasController#create_multipleによるJSとしての処理
パラメータ:{"utf8" => "✓"、 "fields" => [{"contusions" => "1"、 "burns" => ""、 "at_scene" => "At Scene" 、 "emergency_detail_id" => "96"、 "trauma_region" => "Head-Back"}]、 "commit" => "Submit"}

私はコントローラーで以下のようにレコードを作成しようとしています:

  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

この問題の解決にご協力ください。

前もって感謝します。

キラン。

12
Kiran Patil

これを参照して解決しました( https://github.com/Rails/strong_parameters/issues/14 )githubの問題。

[〜#〜]編集[〜#〜]

次のようなパラメーターの場合(配列内にあります):

パラメータ:{"fields" => [{"contusions" => "1"、 "burns" => ""、 "at_scene" => "At Scene"、 "emergency_detail_id" => "96"、 "trauma_region" = > "Head-Back"}]、 "commit" => "Submit"}

我々はできる:

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
8
Kiran Patil

パラメーター:

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

「fields」属性が必要な、ホワイトリストに登録されたオブジェクトの配列:

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

4
Tate Thurston