在导轨4.2 respond_with
和respond_to
已移至responders
宝石。我读过这不是最好的做法。我将backbone.js
用于我的应用。
为了渲染我在控制器中使用的所有用户:
class UsersController < ApplicationController
respond_to :json
def index
@users = User.all
respond_with @users
end
end
有哪些替代方案?
答案 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中的jbuilder或rabl。希望这会有所帮助。
答案 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