Rails根资源JSON

时间:2012-08-28 12:15:36

标签: ruby-on-rails ruby json rest routes

我遇到了一些问题。导航到我的网站时,我希望posts成为默认资源(这是博客:)

www.example.com/ #=> posts#index

www.example.com/15 #=> posts#show

等。但是,我希望能够打开我可以在我的投资组合中使用的API。我可以使用respond_to format.json块来允许:

www.example.com/15.json

但我无法弄清楚如何将索引操作输出为json。以下是我目前的路线:

resources :posts, :path => ''

如何使用JSON扩展访问索引操作?对不起如果那没有任何意义。

2 个答案:

答案 0 :(得分:2)

你的意思是:如何在浏览器的地址栏中写一个url来获取索引作为JSON?

只需将您的根索引路径保持为posts#index ,但允许对/posts/all.json的API调用(当然,您必须自己编写all操作代码) - 您还可以为API调用使用其他子域api.example.com,并为它们仅返回JSON格式的输出,like here Dailymile正在执行。

此外: 我认为API最好有一个线索词,如/posts/<what I want from posts>而不是空白索引/ - 旧的,好的说法好的功能名称是最好的功能文档

答案 1 :(得分:2)

首先,您不需要:path => ''部分。为了使帖子的索引成为您的根路由,只需执行root to: "posts#index"(使用新的哈希语法)。

为了在索引操作中呈现帖子集合,只需在控制器操作中执行respond_to阻止,如下所示:

def index
  @posts = Post.all
  respond_to do |format|
    format.html # render index.html
    format.json { render @posts }
  end
end

要通过json访问此索引操作,只需将.json作为格式传递。您还可以在路线中定义默认格式,如下所示:

resources :posts, defaults: { format: :json }