respond_with rails 4.2 中 backbone 的备选方案
respond_with alternatives in rails 4.2 for backbone
在rails 4.2中,respond_with
和respond_to
已移至responders
gem。我读过这不是最佳做法。我为我的应用程序使用 backbone.js
。
为了渲染控制器中的所有用户,我使用:
class UsersController < ApplicationController
respond_to :json
def index
@users = User.all
respond_with @users
end
end
有哪些替代方案?
只有 respond_with
和 class 级别 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 结构(例如 jbuilder which is included with Rails 4.2 by default or rabl)的模板选项主机。希望这会有所帮助。
如果您遵循 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
在rails 4.2中,respond_with
和respond_to
已移至responders
gem。我读过这不是最佳做法。我为我的应用程序使用 backbone.js
。
为了渲染控制器中的所有用户,我使用:
class UsersController < ApplicationController
respond_to :json
def index
@users = User.all
respond_with @users
end
end
有哪些替代方案?
只有 respond_with
和 class 级别 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 结构(例如 jbuilder which is included with Rails 4.2 by default or rabl)的模板选项主机。希望这会有所帮助。
如果您遵循 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