Ruby on rails 设置所有轨道路线的默认值
在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
如何将这样的默认值应用于应用程序中的所有路由?我想您可以在操作之前全局使用
:
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