19947


actions/new.html.slim.rb

[code]

    = form_for(@action, :url => user_action_path) do |f|
      = f.text_field :one
      = f.text_field :two
      = f.text_field :three
      = f.submit
    
[/code]

controllers/actions_controller.rb

[code]

    def new
      @action = Action.new
    end
    
    def create
      @action = Action.new(params_action)
      if @action.save
        redirect_to room_path
      end
    end
    
    def params_action
      params.require(:action).permit(:one, :two, :three).merge(user_id: current_user.id)
    end
    
[/code]

エラー文  
`undefined method 'permit' for "action":String`

[code]

    request parameter
    {"utf8"=>"✓", "authenticity_token"=>"OPUlMPtPZnDzl+lnT0zrOkf/+EuQwv9MsqT/5BDCgWfuq1uPdA0pS8QhFGtUsJzX0yKlHtbilHDPWT/iSeErIg==", "action"=>"create", "commit"=>"Create Action", "controller"=>"actions", "user_id"=>"1"}
    
[/code]

text_fieldに値を入れても値が空になって飛んできます。。  
このようなエラーは初めてで困惑しています。  
よろしくお願いいたします。


CC BY-SA 3.0
2015-12-13T13:22:30.590
19941
2015-12-13T14:41:51.717
2015-12-13T14:18:17.493
13210
13210
question
ruby-on-rails
form_forでf.text_fieldに入力した値が空になる


`params[:action]`はRailsが利用するので別の名前にする必要があります。  
`:action` 以外の名前を利用するように`form_for`に`:as`のオプションを設定してください。

actions/new.html.slim.rb

[code]

    <%= form_for(@action, url: user_action_path, as: :act) do |f| %>
    
[/code]

また、コントローラーの`params_action`メソッドの内容を以下のように変更することで動くと思います。

controllers/actions_controller.rb

[code]

    def params_action
      params.require(:act).permit(:one, :two, :three).merge(user_id: current_user.id)
    end
    
[/code]


CC BY-SA 3.0
2015-12-13T14:41:51.717
19947
2015-12-13T14:41:51.717
2646
19941
answer