设置所有Rails路由的默认值

时间:2015-11-13 07:54:24

标签: ruby-on-rails rails-routing

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

Rails.application.routes.draw do
  # Other routes

  namespace :api, defaults: { format: :json } do
    resources :users
  end 
end

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

3 个答案:

答案 0 :(得分:3)

我低估了Yury's回答,因为它效率低下。

我最初假定(错误地)您想要设置constraint(IE仅接受JSON mime类型)。如果是这种情况,you'd benefit from this answer

scope format: true, constraints: { format: 'json' } do
  # your routes here
end

由于您希望设置default,我仍然认为Yury's答案效率低(您最好在中间件中设置mime类型,而不是控制器)。

因此,也许你可以use the following

#config/routes.rb
scope format: true, defaults: { format: "json" } do
  ...
end

答案 1 :(得分:1)

基于Yury Lebedev's answer,我使用before_action进行了此操作。使用此方法时,路线defaults选项会有所不同:request.format在使用application/json时未设置为defaults

class ApplicationController < ActionController::Base
  before_action :default_format_json

  def default_format_json
    unless params.key?(:format)
      params[:format] = "json"
    end
  end
end

答案 2 :(得分:0)

我猜你可以全局使用before_action

class ApplicationController < ActionController::Base
  before_action :set_format

  def set_format
    return unless request.format.nil?
    request.format = :json
  end
end