【问题标题】:How to globally PREVENT json rendering in rails?如何在 Rails 中全局防止 json 渲染?
【发布时间】:2013-05-12 23:36:44
【问题描述】:

我有一个 Rails 应用程序,其中大部分操作都响应 json。

尽管调用了respond_to 方法,我是否可以关闭任何“开关”以防止所有控制器响应 json,或者我仍然必须在每个操作中手动禁用它(这看起来很奇怪)。

【问题讨论】:

    标签: ruby-on-rails json respond-to


    【解决方案1】:

    我有一个建议,虽然我害怕有点 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

    【讨论】:

    • 其实这是一个很好的解决方案,找不到更好的解决方案,谢谢:)
    • @TamerShlash,我很高兴 :) 不知道为什么您将运算符修改为完全匹配,因为格式可能包含除“json”之外的其他字符。我认为 REGEX 匹配应该更好并进行修改。
    • 它给了我一个错误,因为它是 ~= 而不是 =~,我不知道问题是什么,因为我不熟悉 Ruby Regex,再次感谢 :)
    • @TamerShlash,是的,这是一个拼写错误,抱歉。已在上次编辑中修复。
    • 在 Rails 4 中,request.format 的类型为 Mime::Type,它不能正确解释 =~ 运算符。请改用if request.format.to_s =~ /json/
    【解决方案2】:

    您也可以在 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
    

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 2013-07-24
      • 2022-11-21
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多