Ruby on rails 设置所有轨道路线的默认值

Ruby on rails 设置所有轨道路线的默认值,ruby-on-rails,rails-routing,Ruby On Rails,Rails Routing,在Rails中,可以为一组路由(在命名空间中)指定默认值,如下所示: 如何将这样的默认值应用于应用程序中的所有路由?我想您可以在操作之前全局使用: class ApplicationController < ActionController::Base before_action :set_format def set_format return unless request.format.nil? request.format = :json end end

在Rails中,可以为一组路由(在命名空间中)指定默认值,如下所示:


如何将这样的默认值应用于应用程序中的所有路由?

我想您可以在操作之前全局使用

class ApplicationController < ActionController::Base
  before_action :set_format

  def set_format
    return unless request.format.nil?
    request.format = :json
  end
end
class ApplicationController
基于,我在动作前使用了一个
。使用此方法时,路由
默认值
选项有所不同:
请求。格式
未设置为
应用程序/json
,因为它使用的是
默认值

class ApplicationController < ActionController::Base
  before_action :default_format_json

  def default_format_json
    unless params.key?(:format)
      params[:format] = "json"
    end
  end
end
class ApplicationController我否决了尤里的回答,因为它效率低下

我最初(错误地)假设您想要设置
约束
(即只接受
JSON
mime类型)。如果是这样的话:

既然您希望设置
默认值
,我仍然认为
Yury的回答效率低下(您最好在中间件中设置mime类型,而不是控制器)

因此,也许你可以:


我不确定这是否可行。但是,您可以在应用程序控制器的
操作之前设置格式(虽然这不一样);我已经有了一个
before_filter
,它只允许格式为JSON的请求,但是如果没有设置,我可以修改它,将格式设置为JSON。我认为这不太正确
request.format
是一种MIME类型,如果已经设置了,则会覆盖它。我在
set\u format
函数中添加了一个nil检查。我认为路由的
defaults
选项也是如此,即使没有指定格式,
request.format
也不是
nil
,而是
text/html
。我最初对此投了反对票,但后来意识到您试图设置的是
default
而不是
约束。这将适用于默认情况,但不适用于默认情况constraint@RichPeckDaniel写道,他已经有了一个
before\u action
,它只允许
json
格式,这就是为什么我刚刚添加了默认值一件小事:
before\u filter
被弃用了,取而代之的是
before\u action
我只想接受json请求,但是使用
约束
对其他请求格式返回404,而不是406。这看起来像我想要的,虽然我不熟悉
格式:true
,但它做什么?不知道-其他问题的人似乎认为它工作得很好。我认为这意味着您的范围启用了
格式
,尽管我必须花一些时间查看它才能确定
class ApplicationController < ActionController::Base
  before_action :default_format_json

  def default_format_json
    unless params.key?(:format)
      params[:format] = "json"
    end
  end
end
scope format: true, constraints: { format: 'json' } do
  # your routes here
end
#config/routes.rb
scope format: true, defaults: { format: "json" } do
  ...
end