1

User.create(params)を試しましたが、これは「コントローラー」と「アクション」が一括割り当てできないことを示しています。これらのプロパティを除外することはできますが、必要なプロパティにマーシャリングする簡単な方法はありますか?

いくつかの例は、params [:user]を使用できることを示しているようですが、投稿をユーザーオブジェクトだけにしたい場合、params [:user]はnilのように見えます。

したがって、{username:'blah'、password:'blah'}で投稿しており、usernameとpasswordはparamsに含まれていますが、params [:user]には含まれていません。

class UsersController < ApplicationController
  def create
    user = User.create(params[:user])
    if user.save
      render :json => user, :status => :created
    else
      logger.error user.errors
      render :json => {:status => :error, :errors => user.errors}, :status => :bad_request
    end
  end
end
4

2 に答える 2

2

Railsプロジェクトには、フォーム要素に特定の方法で名前が付けられる規則があります(フォームヘルパーを使用すると、これが自動的に行われます)。

<input type='text' name='user[username]'>
<input type='text' name='user[username]'>

それらがコントローラーに投稿されると、これらはparamsハッシュに変換されます。

params = {
  :user => {
    :username => 'whatever',
    :password => 'somepass'
  }
}

ルーティングの動作方法により、コントローラー、アクション、ID(該当する場合)、またはカスタムルートパーツのキーと値のペアがこのパラメーターハッシュに追加されます。

params.merge!({
  :controller => 'users',
  :action     => 'create'
})

がnilの場合params[:user]は、規則に一致するようにフォームを変更する必要がある場合があります。

于 2012-12-20T15:00:30.503 に答える
1

User.create(request.request_parameters)またはを試してくださいUser.create(JSON.parse(request.body.read))

于 2012-12-20T14:59:27.843 に答える