【发布时间】:2014-05-29 23:17:15
【问题描述】:
我的控制器操作应该是respond_with 一个新创建的User::SmtpConfig 记录,其模型嵌入在用户记录中,但它错误地将user_id 识别为新记录并引发UrlGenerationError。
错误
/users/531604866465623cca000000/smtp_configs.json 处的 ActionController::UrlGenerationError
没有路由匹配 {:action=>"show", :controller=>"users/smtp_configs", :user_id=>#<:smtpconfig _id: uname: nil auth:>, :format=>nil, :id=>nil} 缺少必需的键:[:id]
控制器动作
respond_to :json
# This action is reached with the following URL path:
# /users/:user_id/smtp_configs/:id.json
def create
user = User.find(params[:user_id])
@smtp = user.smtp_configs.create params
@smtp.id # => BSON::ObjectId('537a85286465620a1f0a0000')
@smtp.user_id # => BSON::ObjectId('531604866465623cca000000')
respond_with @smtp
end
为什么控制器要尝试匹配任何路由?为什么user_id 会评估新创建的对象本身?
【问题讨论】:
-
这个问题(创建后尝试查找显示方法)通常在方法创建无法正常工作时出现。在你的情况下,它似乎工作正常。试试
render json: @smtp。你也使用params,但在rails 4中它不应该因为强大的参数而工作(不确定) -
render json: @smtp确实有效,但不太理想,因为它不包含验证错误。
标签: ruby-on-rails ruby-on-rails-4 mongoid