respond_to :json, :html
.
.
.
return_hash = {}
return_hash[:result] = "valid"
return_hash[:status] = "#{userName} has successfully registered for tournament #{tourneyID}"
respond_with(return_hash) #<--Throwing expection NoMethodError (undefined method `model_name' for NilClass:Class):
这是堆栈跟踪…
NoMethodError (undefined method `model_name' for NilClass:Class):
app/controllers/tournaments_controller.rb:48:in `register'
Rendered /Users/myname/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.8ms)
Rendered /Users/myname/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (151.8ms)
Rendered /Users/myname/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (211.1ms)
非常感谢!
不确定是否重要,但我应该添加这是在响应POST请求
更新: 我有类似的代码,工作得很好,它看起来像这样…
# Store the tourney data
tourney_hash[:tournament_count] = 1
tourney_hash[:tournament_id] = nextTourney.id
tourney_hash[:remaining_time_in_seconds] = remainingTimeInSeconds
respond_with(tourney_hash)
唯一的区别是这段代码是从GET请求调用的,而上面有问题的代码是从POST请求调用的
更新: 当我更改此代码以便从GET请求而不是POST请求调用它时,它工作得很好。你的想法呢?
更新: 目前,我已经将语句"respond_with(return_hash)"替换为"render:json => return_hash"。To_json",它工作得很好。但这并不理想。
due to http://apidock.com/rails/ActionController/MimeResponds/respond_with
respond_with(*resources, &block) public
这意味着respond_with
方法接受资源,而return_hash
是一个散列,而不是一个ActiveRecord对象。所以你的代码是错误的。这是行不通的。
乌利希期刊指南
为什么这与GET工作,而不与POST, PUT或DELETE工作?
我不知道你为什么用respond_with(some_hash)
这样奇怪的结构。什么是respond_with
法?
respond_with将资源封装在响应器周围,用于默认表示
所以不传递资源而是传递哈希值是很奇怪的。
现在让我们来了解它是如何工作的:
# GET request
respond_with(whatever)
# same as
respond_to do |format|
format.html{ } # will render your_action_name.html.erb
end
但是!
# POST request
respond_with(whatever)
# is same as
respond_to do |format|
format.html{ redirect_to WHATEVER } # !!!!
end
这就是respond_with
的工作原理
所以你应该传递一个资源给respond_with
,而不是其他任何东西。所以你的方法是错误的。这就是为什么你会得到一个错误。因为对于redirect_to return_hash
,它试图让model_name
生成一个路径。
。
乌利希期刊指南2
要渲染json,你应该:
respond_to do |format|
format.json{ render :json => return_hash.to_json }
end
我相信respond_with
应该与ActiveRecord对象(或ActiveRecord对象的集合)一起使用,而不是散列。