是否可以在模型中使用“请求”方法?

时间:2011-01-29 15:25:07

标签: ruby-on-rails ruby ruby-on-rails-3 model request

我正在使用Ruby on Rails 3,我想在我的模型文件中做一些这样的事情

if request.headers["CONTENT_LENGTH"]
  ...
end

但是我收到了这个错误:

NameError (undefined local variable or method `request' for #<User:0x00...>):

那么,是否可以在模型中使用'request'方法? 如果是,怎么做?

3 个答案:

答案 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)

从控制器中的请求对象中提取相关数据,然后将它们传递给模型 - 通过在其实例上设置属性或将它们作为参数传递给方法调用。