【问题标题】:JSON, respond_with, and nested resources routing error?JSON、respond_with 和嵌套资源路由错误?
【发布时间】:2011-05-20 02:07:58
【问题描述】:

大家好,提前感谢您查看我的问题。

我有这样的嵌套路由:

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

但是,在发出会创建不充分用户对象的服务器请求(这将导致 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 => "can't be blank"}。有什么想法吗?

谢谢一百万, 贾里德

【问题讨论】:

  • 您能否显示代码 sn-p 或服务器输出以显示响应的实际 URL 是什么?
  • 这里有同样的问题。你知道如何解决它吗?
  • 我知道这个问题已有一百万年历史了,但你有相应的 response_to 吗?

标签: ruby-on-rails json respond-with


【解决方案1】:

还没有实际测试过这个,但也许问题是你调用“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

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多