为什么服务器处理两次for rails中的show action?

时间:2018-04-27 18:59:36

标签: ruby-on-rails server

Started GET "/microposts/29" for 127.0.0.1 at 2018-04-27 22:08:41 +0800
Processing by MicropostsController#show as HTML

一次......

Started GET "/microposts/29" for 127.0.0.1 at 2018-04-27 22:08:41 +0800
Processing by MicropostsController#show as */*

第二次。

我用rails g scaffold创建了微博模型,服务器处于默认设置,索引,创建和编辑操作都被处理了一次。

我不知道为什么show action被服务器处理了两次?谁能帮我这个? (ruby 2.3.3,rails 5.0.1)

1 个答案:

答案 0 :(得分:1)

某些浏览器(Safari)发送的Accept */*未映射到html格式,并且由于某种原因(字母顺序?)映射到js格式。然后protect_from_forgery启动,因为这个请求没有X-Requested-With(为什么它应该是普通的获取)浏览器返回422响应。

从技术上讲,这不是Rails的问题,而是浏览器的问题,

您可以通过修改respond_to do |format|... end块(我认为在创建和更新操作中将其重定向到显示操作)来解决此问题。format.jsformat.json <的注释行/ p>

或者,在控制器中:

before_action do
  if request.format == Mime::ALL
    request.format = request.xhr? ? :js : :html
  end
end