1

次のような単純な新しいフォームがあります。

<h1> New </h1>

<%= form_for :user, url: 'create' do |f| %>

    <p>
    <%= f.label :firstName %>   
    <%= f.text_field :firstName %>
    </p>

    <p>
    <%= f.label :lastName %>    
    <%= f.text_field :lastName %>
    </p>

    <p>
    <%= f.label :userName %>    
    <%= f.text_field :userName %>
    </p>

    <p>
    <%= f.label :password %>    
    <%= f.text_field :password %>
    </p>

    <p>
    <%= f.label :email %>   
    <%= f.text_field :email %>
    </p>

    <p>
        <%= f.submit %>
    </p>

<% end %>

ご覧のとおり、以下に定義されている create アクションを呼び出します。

def create  
    @user = User.new(params[:user])
    @user.save
  end 

次のエラーが表示されます。

ActiveModel::ForbiddenAttributesError

Extracted source (around line #8):
6
7
8
9
10
11

  def create 

    @user = User.new(params[:user])
    @user.save

  end 

私が望むのは、メソッド create が入力を json 引数として受け入れ、それらの引数をユーザー オブジェクトに変換してからオブジェクトを保存することだけです。

アップデート:

post として定義されている次の create メソッドがあります。

def create  
  @user = User.new(user_params)   
  @user.save  
  end 

次のjsonを送信していますが、保存されません:

{"firstName":"John", "lastName:"Doe", "userName":"johndoe", "password":"mypassword", "email":"johndoe@gmail.com"}

アップデート:

次の JSON を渡した後:

{"user":{"firstName":"John", "lastName:"Doe", "userName":"johndoe", "password":"mypassword", "email":"johndoe@gmail.com"}}

HTTPClient アプリケーションで次のエラーが発生します。

<h2>795: unexpected token at &#39;{&quot;user&quot;:{&quot;firstName&quot;:&quot;John&quot;, &quot;lastName:&quot;Doe&quot;, &quot;userName&quot;:&quot;johndoe&quot;, &quot;password&quot;:&quot;mypassword&quot;, &quot;email&quot;:&quot;johndoe@gmail.com&quot;}}&#39;</h2>

アップデート:

JSONを正しく取得した後、次のエラーが表示されます。

ActionController::UsersController#create の InvalidAuthenticityToken

4

1 に答える 1

1

発生しているエラーは、Rails 4 のデフォルトで Rails に含まれているStrong Parametersによるものです。特定のパラメーターのみを許可する代わりに、コントローラーで次のコードを使用してみてください。

def create
  @user = User.new(user_params)
  @user.save

  respond_to do |format|
    format.json { render :json => @user }
  end
end

private

  def user_params
    params.require(:user).permit(:firstName, :lastName, :userName, :password, :email)
  end
于 2013-10-28T02:30:21.213 に答える