我试图通过渲染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数据在哪里?为什么身体是空的?
答案 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