【发布时间】:2011-05-26 22:27:01
【问题描述】:
我正在尝试为我的 Rails 3 应用程序创建 JSONP API。现在在我的控制器中,我有很多遵循这种模式的操作:
# This is from my users_controller.rb, as an example
def index
@users = User.all
respond_with(@users, :callback => params[:callback])
end
虽然这是按原样工作的,但我希望不必在每个操作对 respond_with 的调用中重复 :callback => params[:callback] 来干掉它。我该怎么做?
更新:我意识到我上面的代码很难看的一件事是:callback => params[:callback] 选项将传递给任何响应格式,而不仅仅是 JSON。下面的代码可能更正确:
def index
@users = User.all
respond_with(@users) do |format|
format.json { render :json => @users, :callback => params[:callback]}
end
end
我考虑了几种方法来解决这个问题,但我不知道如何让它们发挥作用:
- 覆盖
render(可能在应用程序控制器中),使其接受自动包含:callback => params[:callback]参数的:jsonp选项。这样我就可以把上面的代码改成下面这样,稍微短一些:
def index
@users = User.all
respond_with(@users) do |format|
format.json { render :jsonp => @users}
end
end
- 创建一个覆盖
to_json的响应程序以解决我的问题。这样我就可以忽略这个问题,只需致电respond_with(@users, :responder => 'MyResponder')即可解决问题。或者我可以使用plataformatec's responders gem 将此代码包含在应用程序响应程序中,这样respond_with(@users)本身就足够了。
【问题讨论】:
标签: ruby-on-rails jsonp dry ruby-on-rails-3 respond-with