JSON, response_with и ошибка маршрутизации вложенных ресурсов? - PullRequest
4 голосов
/ 20 мая 2011

Привет всем, заранее спасибо за проверку моего вопроса.

У меня есть вложенные маршруты, например, так:

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 пытаетсяотображать HTML, а не JSON, но если я изменю свой контроллер следующим образом:

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 => "не может быть пустым"}.Есть мысли?

Спасибо за миллион, Джаред

1 Ответ

0 голосов
/ 28 мая 2012

На самом деле это не проверялось, но, возможно, проблема в том, что несколько объектов в вашем вызове response_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

См. Вкладчик кода response_with, последний комментарий Хосе Валима здесь:

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

...