Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 以返回的JSON响应api版本的更好方法_Ruby On Rails - Fatal编程技术网

Ruby on rails 以返回的JSON响应api版本的更好方法

Ruby on rails 以返回的JSON响应api版本的更好方法,ruby-on-rails,Ruby On Rails,我想知道如何用JSON响应api版本 因为我需要对响应中的版本进行硬编码 returned_data = { status: "ok", version: "version_num", data: symbols } render json: Oj.dump(returned_data) 这似乎不是很简单,因为我需要在每个函数中放入类似的代码 在Rails方面有更好的实践吗 routes.rb 更新lx00st的建议 如果你正在创建一个API,你应该考虑使用JSON建造

我想知道如何用JSON响应api版本

因为我需要对响应中的版本进行硬编码

returned_data = {
    status: "ok",
    version: "version_num",
    data: symbols
}
render json: Oj.dump(returned_data)
这似乎不是很简单,因为我需要在每个函数中放入类似的代码

在Rails方面有更好的实践吗

routes.rb 更新lx00st的建议

如果你正在创建一个API,你应该考虑使用JSON建造者而不是简单地用JSON的方式呈现你自己。一个很好的解决办法是。这将允许您定义一个全局序列化程序,该序列化程序始终包含一个特定的JSON位,它将被合并到其他响应中。这也意味着您不必手动构建JSON。

为什么不在采取行动之前将其放入相应的控制器?@lx00st我接受了您的建议,谢谢您为什么返回api版本而不将其放入uri?
  namespace :api, defaults: {format: 'json'} do
    scope module: :v1, constraints: ApiConstraints.new(version: 1) do
      resources :products
    end
    scope module: :v2, constraints: ApiConstraints.new(version: 2, default: true) do
      resources :products
    end
  end
  before_action :response_template

  private
    def response_template
      @respose = {
          status: "ok",
          version: "v1"
      }
   end

   def   EVERY_METHOD
       @respose[:data] = symbols
      render json: Oj.dump( @respose )
   end