我的模型中有一个方法可以检测用户代理。如何使其可用于我的所有控制器方法?
型号:
def is_iphone_request?
if request.user_agent =~ /iPhone/
return true
end
end
控制器(抛出错误):
def index
@user_agent = is_iphone_request?
end
我怎样才能做到这一点?非常感谢任何帮助。
答案 0 :(得分:3)
将方法放在ApplicationController
而不是模型中。
答案 1 :(得分:0)
我不确定你为什么要对模型进行请求用户代理检查 - 这似乎是一种以控制器为中心的行为。并且您可以使用控制器中的请求属性。
答案 2 :(得分:0)
虽然request
不在模型中可用(您将获得带有以下代码的NameError
),但您当前的问题是控制器正在抛出{ {1}}因为您在方法定义中缺少NoMethodError
。使它成为一个类方法(通过添加self.
):
self.
然后,在您的控制器中,您可以使用:
class MyModel < ActiveRecord::Base
def self.is_iphone_request?
if request.user_agent =~ /iPhone/
return true
end
end
但就像我说的那样,你会得到MyModel.is_iphone_request?
,因为模型中没有NameError
。
您的方法request
应该存在于您的is_iphone_request?
中(可以是常规的ApplicationController
方法)。你也可以减少它:
private
然后,在您的控制器中,您可以使用:
class ApplicationController < ActionController::Base
...
private
def is_iphone_request?
request.user_agent =~ /iPhone/ ? true : false
end
end