2009-08-26 8 views
5

以下のコードシーケンスは、レールコントローラアクションで使用しています。 IFの前にはparamsに要求パラメータが含まれています。その後、paramsはゼロになります。誰でもここで起こっていることを説明できますか?レールでparamsハッシュを割り当て/置き換えます。

if false 
    params = {:user => {:name => "user", :comment => 'comment'}} 
end 

ありがとうございます。

答えて

10

リクエストパラメータを含むparamsは、実際にはパラメータを含むハッシュを返すメソッド呼び出しです。 params =行がparamsというローカル変数に割り当てられています。

if falseブロックの後で、Rubyはローカル変数paramsを見たので、メソッドの後のparamsを参照すると、ローカル変数は同じ名前のメソッドを呼び出すよりも優先されます。しかし、あなたのparams =割り当てがif falseブロック内にあるので、ローカル変数は決して値を割り当てられないので、ローカル変数はnilです。

あなたがそれに割り当てる前にローカル変数を参照しようとすると、あなたはNameErrorを取得します:

しかし、コードの実行パスその後、Rubyでない変数への代入がある場合
irb(main):001:0> baz 
NameError: undefined local variable or method `baz' for main:Object 
     from (irb):1 

ローカル変数を作成しましたが、その値はnilです。

irb(main):007:0> baz = "Example" if false 
=> nil 
irb(main):008:0> baz 
=> nil 
+0

「Rubyはローカルパラメータを実際に見ました」とRuby ???本当に!!!??? O_o(申し訳ありませんが、それは数日かかる...見て実行されていない、それですか?) – steffen

関連する問題