QA@IT

【解決】Rails4 undefined method `permit' for [{"name"=>"花子"}, {"name"=>"二郎"}]:Array

6925 PV

以下のようにして一度の操作で2つのデータを登録しようとしていますが、登録ボタンをクリックすると一番下の例外が発生してしまいます。Strong Parametersの設定に間違いはなさそうなんですが・・・。ControllerでViewから配列のデータを受け取る方法をご存知の方、ご教授ください。よろしくお願い致します。

View:

<%= form_tag :controller => :users, :action => :create do %>
  <% @users.each_with_index do |user| %>
    <%= text_field_tag("user[][name]") %>
  <% end %>
  <%= submit_tag "登録" %> 
<% end %>

Controller:

class MarketpricesController < ApplicationController
  def new
    @users = [User.new, User.new]
  end

  def create
    user1 = User.new(users_params[0])
    user2 = User.new(users_params[1]) 
    user1.save
    user2.save

    redirect_to users_path
  end

  private
  def users_params
    # ここでエラーが発生
    params.require(:user).permit(:name => [])
  end
end

フォームにデータを入力し、送信ボタンをおした時にControllerへ渡されているParameters:

{"utf8"=>"✓",
 "authenticity_token"=>"jFTH/JTwLZB8oL3hoVcMgbKxLXqNZ1CGTc2144keuGQ=",
 "user"=>[{"name"=>"花子"},
 {"name"=>"二郎"}],
 "commit"=>"登録"}

発生した例外:

NoMethodError in UsersController#create
undefined method `permit' for [{"name"=>"花子"}, {"name"=>"二郎"}]:Array

回答

実際になにをしたかを書いておきます。

Controller:

class MarketpricesController < ApplicationController
  def new
    @users = [User.new, User.new]
  end

  def create
    user1 = User.new(users_params[0])
    user2 = User.new(users_params[1]) 
    user1.save
    user2.save

    redirect_to users_path
  end

  private
  def users_params
    params.require(:user).map do |u|
       ActionController::Parameters.new(u.to_hash).permit(:name)
    end
  end
end

変更したのはusers_paramsのみです。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。