1

エラーが発生します

Started POST "/actions" for 127.0.0.1 at 2012-10-29 15:04:01 +0600
Processing by ActionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"lfHYF3EQn1/lMReK3alX3NsGa4wSMejC/0fEeoAFYUY=", "commit"=>"Create Action"}
Completed 500 Internal Server Error in 1ms

NoMethodError (undefined method `stringify_keys' for "create":String):
  app/controllers/actions_controller.rb:43:in `new'
  app/controllers/actions_controller.rb:43:in `create'

このコードは完全に Rails によって生成されたものであり、なぜ機能しないのかわかりません

モデルはこちら

class Action < ActiveRecord::Base
  attr_accessible :name, :user_id
end

コントローラー部分はこちら

# GET /actions/new
# GET /actions/new.json
def new
  @action = Action.new

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @action }
  end
end

def create
  @action = Action.new(params[:action]) # here we get an error !

  respond_to do |format|
    if @action.save
      format.html { redirect_to @action, notice: 'Action was successfully created.' }
      format.json { render json: @action, status: :created, location: @action }
    else
      format.html { render action: "new" }
      format.json { render json: @action.errors, status: :unprocessable_entity }
    end
  end
end

そして、ここにフォームコードがあります

<%= form_for(@action) do |f| %>
  <% if @action.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@action.errors.count, "error") %> prohibited this action from being saved:</h2>

      <ul>
      <% @action.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :user_id %><br />
    <%= f.number_field :user_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

投稿を押すと、firebug にこのリクエスト パラメータが表示されます

utf8:✓
authenticity_token:lfHYF3EQn1/lMReK3alX3NsGa4wSMejC/0fEeoAFYUY=
action[name]:sdf
action[user_id]:23
commit:Create Action

私が正しく理解している場合、これは機能し、レールは action[name] と action[user_id] をハッシュ テーブルに変換し、それを parameters[:action] に配置する必要があり、Action.new はこのハッシュ テーブルをパラメーターとして取得します。なにが問題ですか ?

4

2 に答える 2

4

ああ、私は知っています。名前が衝突しています。

action予約名です。と一緒にcontrolleridそしておそらく他の人も。フォームに別の名前を使用してください。

に投稿するときは/actions/createparams[:controller]'posts'params[:action]で 'create' である必要があります。これらのパラメーターは Rails によって割り当てられます。

于 2012-10-29T09:19:24.473 に答える
0

paramsでは、params [:controller] =controller_nameおよびparams[:action] = action_nameを取得します。
この場合、オブジェクトactionのparamsではなく、action_nameからActionabjectを作成しています。オブジェクトパラメータのパラメータで別の名前を使用してみてください。

于 2012-10-29T09:23:37.690 に答える