【发布时间】:2013-05-12 23:36:44
【问题描述】:
我有一个 Rails 应用程序,其中大部分操作都响应 json。
尽管调用了respond_to 方法,我是否可以关闭任何“开关”以防止所有控制器响应 json,或者我仍然必须在每个操作中手动禁用它(这看起来很奇怪)。
【问题讨论】:
标签: ruby-on-rails json respond-to
我有一个 Rails 应用程序,其中大部分操作都响应 json。
尽管调用了respond_to 方法,我是否可以关闭任何“开关”以防止所有控制器响应 json,或者我仍然必须在每个操作中手动禁用它(这看起来很奇怪)。
【问题讨论】:
标签: ruby-on-rails json respond-to
我有一个建议,虽然我害怕有点 hacky :)
class < ApplicationController
before_filter :disable_json
def disable_json
if request.format =~ /json/
//do something you like, redirect_to or reply with message
end
end
before_filter 将在任何特定控制器的方法之前触发。
json头通常是“application/json”
对于request,您可以在此处阅读更多信息:http://guides.rubyonrails.org/action_controller_overview.html#the-request-object
【讨论】:
~= 而不是 =~,我不知道问题是什么,因为我不熟悉 Ruby Regex,再次感谢 :)
request.format 的类型为 Mime::Type,它不能正确解释 =~ 运算符。请改用if request.format.to_s =~ /json/。
您也可以在 routes.rb 中使用约束:
# Only allow HTML requests for all resources within the block
scope constraints: {format: :html} do
resources :posts
resources :comments
get "/profile", to: "users#profile"
end
【讨论】: