没有从我的模型返回JSON?
为什么在这种情况下没有响应json? 我用明确的.json调用动作(/tasks/4e3c1163a19d461203000106/items/4e4c27dfa19d46e0e400000a.json)
在我的控制器 -
class Tasks::TasksController < Tasks::BaseController
respond_to :html, :js, :json
def update
@task = @taskgroup.update_task(params[:id], params[:task])
@taskgroup.save
respond_with @task
end
end
当我覆盖to_json并添加一个断点时,它不会被命中。 答复是:
{}
如果我用to_json的显式调用替换respond_with:
respond_with @task do |format|
format.json { render json: @task.to_json }
end
答案很完美:
{
"_id":"4e4c27dfa19d46e0e400000a",
"assigned_to":null,
"comments" [{"_id":"4e4c2fd7a19d46e127000014",
[SNIP]
它在后面的情况下工作正常,但我想弄清楚为什么第一个不起作用。 这发生在我的应用程序中的其他控制器和模型。 不确定它是否是一个mongoid的东西? (rails 3.0.9 / mongoid 2.1.8)
好吧,看看它如何。 当你在update
动作中调用respond_with
(如果对象有效),它将重定向到show
动作(如果你不想要这个默认行为,你必须提供location: "other_action"
给respond_with
)。
下面是我写的一个monkeypatch,它总是对你说的无论协议做什么都做出回应。 被警告这会破坏RESTful最佳实践,如果以RESTful方式响应,则可能会中断。 但是,如果您的JSON / XML响应与主应用程序分开,那么它很有用,而其他控制器不会中断。
用法,将其包含在任何控制器中以覆盖respond_with功能。
class ApiController < BaseController
include ValidResponder
end
那么扩展ApiController的任何东西都会包含这个功能。
将以下内容保存在app / lib / valid_responder.rb中:
#Override restful responses.
module ValidResponder
def self.included(base)
ActionController::Responder.class_eval do
alias :old_api_behavior :api_behavior
define_method :api_behavior do |error|
if controller.class.ancestors.include?(base)
raise error unless resourceful?
display resource
else
old_api_behaviour(error)
end
end
end
end
end
作为参考,实际的方法来源可以在这里找到:http://api.rubyonrails.org/classes/ActionController/Responder.html#method-i-api_behavior
链接地址: http://www.djcxy.com/p/54373.html上一篇: with not returning json from my model?
下一篇: iOS UIBezierAnimation curves, howto to create some sort of arc?