Rails:如何检查使用'渲染json创建的响应:'?

时间:2017-02-01 11:40:22

标签: ruby-on-rails json ajax controller

我试图通过渲染JSON来理解异步更新Rails视图的机制(因为我的老板希望以这种方式完成)。

到目前为止还不太成功。

有没有办法检查在OS层上看到的响应?就像我使用curl时一样?我正在尝试写一篇关于这个主题的可能的博客文章的学习,并且有一种方法可视化Rails在渲染JSON时发出的内容真的很有帮助。

重要的控制器部分,如下所示:

def create
  @order = Order.find_by(id: params[:order_id])
  @comment = current_user.comments.new(comment_params)
  .
  .
  return unless @comment.save!

  respond_to do |format|
    format.json { render json: @comment, context: self }
  end

end

编辑:

根据我尝试使用debugger / pry检查响应的其中一条注释,首先确保@comment对象包含数据:

(byebug) @comment
#<Comment id: 3090, order_id: 125, user_id: 18, content: "asdfad", created_at: "2017-02-01 12:21:25", updated_at: "2017-02-01 12:21:25">

似乎很好。

(byebug) response.body
""

不太酷,JSON数据在哪里?为什么身体是空的?

2 个答案:

答案 0 :(得分:3)

您可以编写测试来实现目标,也可以将代码after_action {puts response.body }放到控制器中。

<强> application_controller.rb

class ApplicationController < ActionController::Base
  ...
  after_action { puts response.body }
  ...
end

<强> some_test_spec.rb

require 'rails_helper'

RSpec.describe YourController, type: :controller do

  describe "GET #index" do

    it "returns some data" do
      get :index

      puts response.body

      binding.pry # for interactive debugging

      expect(response.status).to eq(200)
    end

  end

end

答案 1 :(得分:1)

上面描述的使用规范的方法是完全有效的。此外,您已经有规格:)

无论如何,人们可能会面临一些需要检查请求/响应的其他有效用例(可能超过下面一次)。

<强> 1。使用javascript向本地/当前应用程序执行一些请求

可以使用例如chrome web dev工具用于检查请求,响应和标头。这非常有用且方便。

此外,您可以拖尾应用程序日志并查看带有参数的传入请求。在rails开发中,您还会看到许多rails调试信息,例如活动记录语句,渲染调用,邮件程序交互等。

除了提供的信息之外,您还可以添加尽可能多的调试输出(假设您处于rails开发模式)

logger.debug "any important information you need"

甚至使用断点进行调试[1]。

<强> 2。使用javascript向远程/其他应用程序执行一些请求

如果您可以控制远程应用程序,那么它基本上就是1.您只需拖尾另一个应用程序的日志。 :)

第3。从rails控制器向另一个应用程序执行请求

如果您可以控制其他应用程序,您可以再次拖尾其日志,使用断点进行调试或添加日志输出(例如,来自控制器级别中可用的@request变量)

此外,您可以在主应用程序中使用调试日志记录,并在该位置输出已接收或调试的响应。

如果您使用某个http客户端作为法拉第[2](我强烈建议),您可以激活其日志记录。参见基本用法章节[3]。使用法拉第,您甚至可以提供自己的记录器或使用第三方记录器[4]来获得更好的输出。

[1] http://guides.rubyonrails.org/debugging_rails_applications.html

[2] https://github.com/lostisland/faraday

[3] https://github.com/lostisland/faraday#basic-use

[4] https://github.com/envylabs/faraday-detailed_logger