2011-01-29 8 views
1

私はRailsの3にルビーを使用していると私は私のモデルファイルにモデルで 'request'メソッドを使用することはできますか?

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

を、このようないくつかの操作を行うためにトリングのですが、私はこのエラーを取得:

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

ので、することが可能ですモデルで 'request'メソッドを使用しますか? もしそうなら、どうですか?

+0

モデルからリクエストにアクセスできる場合でも、それは避けてください。あなたが解決しようとしている実際の問題は何ですか?間違いなくレールでそれを解決するより良い方法があります。 –

+0

モデルのCUSTOM検証メソッドを使用してファイルのアップロードを検証しようとしています。これも参照してください:http://stackoverflow.com/questions/4837014/how-to-check-the-field-content-length-of-an-http-request-using-ruby-on-rails-3 – user502052

+0

@ user502052 :なぜUserモデルでそれを行うのですか? – tokland

答えて

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) 
+0

私はおそらくそれを少しデカップルし、要求全体を送信する代わりに(要求を見ているモデルは奇妙なものです)、メソッドが本当にチェックする必要があるものだけを送ります。しかし、OPの質問はそれほど簡単ではありませんので、この答えはOKです。 – tokland

+0

合意 - 私はモデルにリクエストコードを入れて提唱していません... – stef

0

が法で要求オブジェクトを使用するには良いアプリの設計ではありませんが、あなたは絶対にそれを必要とするならば、あなたが行うことができます:

class User 
    def a_method request 
    end 
end 

class UserController 
    def index 
    User.find(params[:user]).a_method request 
    end 
end 
0

例コントローラー内のリクエストオブジェクトから関連するデータを取得し、モデルのインスタンスに属性を設定するか、メソッド呼び出しにパラメータとして渡してモデルに渡します。

関連する問題