没有从我的模型返回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?