4

皆さん、私の質問をチェックしていただきありがとうございます。

私は次のようにネストされたルートを持っています:

resources :users do
  resources :avatars
end

ユーザーを作成すると、次のようにアバターも作成します。

def create
  @user = User.create(params[:user])
  @avatar = Avatar.create(:user_id => @user)
  # Send both User and Avatar object back
  respond_with(@user,@avatar)
end

ただし、不適切な User オブジェクトを作成するサーバー要求を行うと (JSON 応答 {error_key => ...} になるはずです)、rails から次のエラーが返されます。

ActionController::RoutingError (No route matches {:user_id=>#<User id: nil, name: nil, phone_number: "mcdkls", email: "fdsa@cmadksl", password_hash: nil, password_salt: nil, auth_token: nil, admin: false>, :action=>"show", :controller=>"avatars", :id=>#<Avatar id: 19, user_id: 1, created_at: "2011-05-20 01:52:22", updated_at: "2011-05-20 01:52:22">}):
app/controllers/users_controller.rb:13:in `create'

Rails は JSON ではなく HTML を表示しようとしているようですが、コントローラーを次のように変更すると:

def create
  @user = User.create(params[:user])
  @avatar = Avatar.create(:user_id => @user)
  # Send both User and Avatar object back
  respond_with(@user)
end

Rails は美しい {name => "can't be blank"} を返します。何かご意見は?

ありがとう、ジャレッド

4

1 に答える 1

0

これを実際にテストしたことはありませんが、「respond_with」への呼び出しで複数のオブジェクトが問題になっている可能性がありますか? 代わりに、オブジェクトを配列に入れてみてください。

def create
  @user = User.create(params[:user])
  @avatar = Avatar.create(:user_id => @user)
  # Send both User and Avatar object back
  respond_with([@user,@avatar])
end

Respond_with コードの貢献者である Jose Valim の最後のコメントを参照してください。

http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with

于 2012-05-28T04:41:42.220 に答える