我遇到了一些问题。导航到我的网站时,我希望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扩展访问索引操作?对不起如果那没有任何意义。
答案 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 }