获取json响应而不指定URL中的“.json”

时间:2015-10-29 22:41:13

标签: javascript ruby-on-rails json angularjs routes

我正在研究Rails + AngularJS应用程序。为了访问我的应用程序的json响应,我必须在我的angular $ resource url中/something.json而不是/something

有没有办法解决它?

路线

upvote_post_comment PUT  /posts/:post_id/comments/:id/upvote(.:format) comments#upvote
      post_comments POST /posts/:post_id/comments(.:format)            comments#create
       post_comment GET  /posts/:post_id/comments/:id(.:format)        comments#show
        upvote_post PUT  /posts/:id/upvote(.:format)                   posts#upvote
              posts GET  /posts(.:format)                              posts#index
                    POST /posts(.:format)                              posts#create
               post GET  /posts/:id(.:format)                          posts#show
                    GET  /                                             home#index

PostsController

class PostsController < ApplicationController
    def index
        @posts = Post.all

        respond_to do |format|
            format.json { render json: @posts }
        end
    end
end

Angular serviceProvider

angular.module('flapperNews')
.factory('posts', ['$resource', function($resource) {
    return $resource('/posts.json/:id', {id: "@id"})
}]);

3 个答案:

答案 0 :(得分:1)

尝试将.json添加到网址的末尾

angular.module('flapperNews')
.factory('posts', ['$resource', function($resource) {
    return $resource('/posts/' + id + '.json')
}]);

答案 1 :(得分:1)

在你的控制器中,只有当格式respond_do被指定为json时,(.:format) in the routes才会给出json响应。

您可以修改您的控制器 PostsController 以响应json无关紧要 - 格式是什么。

class PostsController < ApplicationController
    def index
        @posts = Post.all
        render json: @posts
    end
end

注意:在此之后,网址后的格式不重要(无论是.json,.xml,没有)。控制器的动作总是返回json。

答案 2 :(得分:1)

在routes.rb中设置默认格式

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