2015-10-29 3 views
0

Im работает над Rails + AngularJS. Чтобы получить доступ к json-ответу моего приложения, у меня есть /something.json в моем угловом $ ресурсе url вместо /somethingПолучите ответ json без указания «.json в URL»

есть способ, как исправить?

Маршруты

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 

Угловая ServiceProvider

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

Я думаю, вы можете просто добавить + «.json» к первому парам –

+0

Я не верю, что он хочет '.json' расширения в его угловом приложении ? –

+0

Это не работает, с .json в URL-адресе означает, что ресурс, к которому вы обращаетесь, не возвращает тип содержимого как json, а html. Поэтому попробуйте установить тип контента с вашего сервера как «application/json», а затем посмотрите. – cafebabe1991

ответ

1

В контроллере вы говорите по respond_do дать ответ JSon только тогда, когда формат (.:format) in the routes указан в формате JSON.

Вы можете изменить ваш контроллер PostsController ответить json no-matter-what is format.

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

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

1

Попробуйте dding .json к концу URL

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

Заданный формат по умолчанию в routes.rb

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