406 Rails 4和AngularJS 1.3.x $ http.get不可接受的错误

时间:2015-01-18 18:40:05

标签: javascript ruby-on-rails angularjs rest

我已经查看了StackOverflow上的其他示例,我仍然需要帮助。

我的问题是使用o.get函数按其ID检索单个帖子。

在调试时,我发现当我点击正确的链接时,我实际上正在点击此功能。但是,单击时会抛出406 Not Acceptable错误。

我不确定这个问题是在角度方面,还是我的节目动作,也可以在下面找到。

以下是我服务的代码:

angular.module('hackerNews')
.factory('posts', ['$http',
    function($http) {
        var o = {
            posts: []
        };

    o.getAll = function() {
        return $http.get('/posts.json').success(function(data) {
            angular.copy(data, o.posts);
        });
    };

    o.create = function(post) {
        return $http.post('/posts.json', post).success(function(data) {
            o.posts.push(data);
        });
    };

    o.upvote = function(post) {
        return $http.put('/posts/' + post.id + '/upvote.json').success(function(data) {
            post.upvotes += 1;
        });
    };

    o.get = function(id) {
        return $http.get('/posts/' + id).then(function(res) {
            return res.data;
        });
    };

    o.addComment = function(id, comment) {
        return $http.post('/posts/' + id + '/comments.json', comment);
    };

    o.upvoteComment = function(post, comment) {
        return $http.put('/posts/' + post.id + '/comments' + comment.id + '/upvote.json')
        .success(function(data) {
            comment.upvotes += 1;
        });
    };
    return o;
}])

节目动作:

def show
    respond_with Post.find(params[:id])
end

非常感谢任何帮助。

谢谢!

编辑:

以下是我的控制器中的内容:

以下是我在Application Controller中的内容,我有以下内容:

respond_to :json

大多数控制器如下:

class PostsController < ApplicationController

    def index
        respond_with Post.all
    end

    def create
        respond_with Post.create(post_params)
    end

    def show
        respond_with Post.find(params[:id])
    end

    def upvote
        post = Post.find(params[:id])
        post.increment!(:upvotes)

        respond_with post
    end 

    private

    def post_params
        params.require(:post).permit(:link, :title)
    end
end

2 个答案:

答案 0 :(得分:2)

您需要在控制器顶部添加respond_to(包含您正在使用的格式列表)才能使respond_with正常工作。您可以在此处详细了解:http://apidock.com/rails/ActionController/MimeResponds/respond_with

class PostsController < ApplicationController

  respond_to :json

  def index
    respond_with Post.all
  end

end

答案 1 :(得分:2)

我遇到了同样的问题。我尝试的解决方法是将“.json”添加到o.get函数中,如下所示:

o.get = function(id) {
  return $http.get('/posts/' + id + '.json').then(function(res) {
    return res.data;
  });
};