我使用Rails 3的Ruby和我特林做一些像這樣在我模型文件是否可以在模型中使用'請求'方法?
if request.headers["CONTENT_LENGTH"]
...
end
,但我得到這個錯誤:
NameError (undefined local variable or method `request' for #<User:0x00...>):
那麼,有沒有可能在模型中使用'請求'方法? 如果是這樣,怎麼樣?
我使用Rails 3的Ruby和我特林做一些像這樣在我模型文件是否可以在模型中使用'請求'方法?
if request.headers["CONTENT_LENGTH"]
...
end
,但我得到這個錯誤:
NameError (undefined local variable or method `request' for #<User:0x00...>):
那麼,有沒有可能在模型中使用'請求'方法? 如果是這樣,怎麼樣?
不,因爲請求僅在控制器和視圖代碼中可用。從設計角度來看,建議您在模型代碼中使用請求,但假設您希望針對您的用戶的特定實例執行某項操作,只需爲其創建一個方法:
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)
不好的應用程序設計中使用的方法請求對象,但如果你確實需要它,你可以這樣做:
class User
def a_method request
end
end
class UserController
def index
User.find(params[:user]).a_method request
end
end
防爆在您的控制器中傳遞請求對象中的相關數據,然後將它們傳遞給模型 - 可以通過在其實例上設置屬性或將它們作爲參數傳遞給方法調用。
如果您可以訪問模型中的請求,您仍然不應該這樣做。你試圖解決的實際問題是什麼?毫無疑問,有更好的方式來解決它在軌道上。 –
我想在模型中使用CUSTOM驗證方法驗證文件上傳。另請參閱此:http://stackoverflow.com/questions/4837014/how-to-check-the-field-content-length-of-an-http-request-using-ruby-on-rails-3 – user502052
@ user502052 :但爲什麼在用戶模型中呢? – tokland