如何在rails中提供静态JSON文件?

时间:2012-06-22 02:21:44

标签: ruby-on-rails json

我的服务器上有一个文件在我的app目录之外。它是一个包含json对象/path/to/data.json的文本文件。

在Rails中提供此文件的最简单方法是什么,例如返回它以响应GET请求?

这是迄今为止我尝试过的,受到this answer和其他人的启发。 (这可能是偏离基础的 - 我是铁杆新手。)

  1. 将此行添加到routes.rb resources :data

  2. 写了以下data_controller.rb

  3. class DataController < ApplicationController

    @data = File.read("/path/to/data.json")
    
    def index
      render :json => @data
     end
    end
    

    这不起作用。当我将浏览器定向到http://myserver.com/data.json时,我只看到“null”而不是data.json文件。

    知道我做错了吗?

4 个答案:

答案 0 :(得分:13)

我认为这是一个范围问题;你的外部@data与方法中的@data不同。也就是说,你不能在方法之外使用实例变量,因为还没有实例。

如果使用类变量,它应该有效,例如

@@data = File.read("/path/to/data.json")

然后

render :json => @@data

答案 1 :(得分:8)

将其放入public/assets/javascripts。或app/assets/javascripts。服务器甚至可以返回正确的内容类型。

答案 2 :(得分:4)

  • 将“data.json”文件放入项目目录(例如“public / data.json”)
  • @data = File.read(“#{Rails.root} /public/data.json”)
  • 最后但并非最不重要的是渲染:json =&gt; @data

答案 3 :(得分:0)

您也可以一行完成,例如

render :file => '/path/to/data.json', 
  :content_type => 'application/json',
  :layout => false