在rails中基于用户代理设置内容处置(iOS错误的解决方法)

时间:2012-08-02 15:54:50

标签: ruby-on-rails ios

我在我的应用程序中遇到了this错误,其中移动safari中的ajax在收到Content-Disposition:attachment的响应后停止工作

我想继续发送处置:附加到桌面浏览器和非iOS移动设备,同时切换到处置:在iOS上内联。我需要在几个不同的控制器操作中执行此操作。

除了将这些类型的块放在一起之外,还有一种优雅的方法吗?

if request.env['HTTP_USER_AGENT'] =~ /iPad/
    disposition = :inline
else 
    disposition = :attachment
end

1 个答案:

答案 0 :(得分:2)

只需在应用程序控制器中创建一个before_filter即可一次性设置它!

class ApplicationController < ActionController::Base
  before_filter :set_content_disposition

  def set_content_disposition
    if request.env['HTTP_USER_AGENT'] =~ /iPad/
      response.headers['Content-Disposition'] = 'inline'
    elsif params[:format].in?(['pdf', 'other_format', 'other_format2'])
      response.headers['Content-Disposition'] = 'attachment'
    end
  end
  #Rest of application controller code ...
end