Получите ответ json без указания «.json in URL»

0

Im работает над Rails + AngularJS. Чтобы получить доступ к json-ответу моего приложения, я должен /something.json в своем угловом 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

Угловой сервисProvider

angular.module('flapperNews')
.factory('posts', ['$resource', function($resource) {
    return $resource('/posts.json/:id', {id: "@id"})
}]);
  • 0
    Я думаю, что вы можете просто добавить + '.json' к первому параметру
  • 0
    Я не верю, что он хочет расширение .json в своем приложении Angular?
Показать ещё 1 комментарий

3 ответа

1
Лучший ответ

В вашем контроллере вы respond_do чтобы дать ответ json только тогда, когда формат (.:format) in the routes указан как json.

Вы можете изменить свой контроллер PostsController, чтобы ответить json no-matter - какой формат.

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

Примечание: после этого формат после URL не имеет значения (будь то.json,.xml, ничего). Действие контроллера wold всегда возвращает json.

1

Установите формат по умолчанию в routes.rb

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

Попробуйте добавить .json в конец URL-адреса.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню