response_with rails 4.2 for backbone中的替代方案

时间:2015-02-10 01:59:08

标签: api backbone.js ruby-on-rails-4.2

在导轨4.2 respond_withrespond_to已移至responders宝石。我读过这不是最好的做法。我将backbone.js用于我的应用。

为了渲染我在控制器中使用的所有用户:

class UsersController < ApplicationController
  respond_to :json

  def index
    @users = User.all

    respond_with @users
  end
end

有哪些替代方案?

2 个答案:

答案 0 :(得分:8)

respond_with和类级别respond_to已按指示here删除。您仍然可以一如既往地使用实例级respond_to

class UsersController < ApplicationController
  def index
    @users = User.all

    respond_to do |wants|
      wants.json { render json: @users }
    end
  end
end

话虽如此,将响应者gem添加到您的项目并继续编写代码就像在您的示例中一样没有任何问题。将此行为提取到单独的gem中的原因是许多Rails核心成员不认为它属于主Rails API。 Source

如果您正在寻找更强大的功能,请查看用于返回JSON结构的模板选项主机,例如默认情况下包含在Rails 4.2中的jbuilderrabl。希望这会有所帮助。

答案 1 :(得分:2)

如果您遵循Bart Jedrocha的建议并使用jbuilder(默认情况下已添加),则respond_*方法调用变得不必要。这是我为测试Android应用而制作的简单API。

# controllers/api/posts_controller.rb

module Api
  class PostsController < ApplicationController

    protect_from_forgery with: :null_session

    def index
      @posts = Post.where(query_params)
                            .page(page_params[:page])
                            .per(page_params[:page_size])
    end

    private

    def page_params
      params.permit(:page, :page_size)
    end

    def query_params
      params.permit(:post_id, :title, :image_url)
    end

  end
end

# routes.rb

namespace :api , defaults: { format: :json } do
  resources :posts
end

# views/api/posts/index.json.jbuilder

json.array!(@posts) do |post|
  json.id        post.id
  json.title     post.title
  json.image_url post.image_url
end