我正在使用Ruby on Rails 3,我想在我的模型文件中做一些这样的事情
if request.headers["CONTENT_LENGTH"]
...
end
但是我收到了这个错误:
NameError (undefined local variable or method `request' for #<User:0x00...>):
那么,是否可以在模型中使用'request'方法? 如果是,怎么做?
答案 0 :(得分:2)
不,因为请求仅在控制器和视图代码中可用。从设计的角度来看,你不建议在模型代码中使用请求,但是假设你想对用户的特定实例上的请求做一些事情,只需为它创建一个方法:
class User
...
def has_a_request?(request)
raise ArgumentError if(request.blank? || !request.respond_to(:headers))
if(request.headers["CONTENT_LENGTH"] # Does it really have CONTENT_LENGTH btw?
puts "#{self.username} got a request with content length"
return true
else
puts "#{self.username} didn't get a request with content length"
return false
end
end
然后在你的应用程序的其他地方:
User.has_a_request?(request)
答案 1 :(得分:0)
在方法中使用请求对象不是好的应用程序设计,但是如果你确实需要它,你可以这样做:
class User
def a_method request
end
end
class UserController
def index
User.find(params[:user]).a_method request
end
end
答案 2 :(得分:0)
从控制器中的请求对象中提取相关数据,然后将它们传递给模型 - 通过在其实例上设置属性或将它们作为参数传递给方法调用。