2011-11-15 18 views
1

私は現時点でruby/railsの学習に取り組んでいます - 私が読んでいる本は、新しい構文のビットをスキップする傾向がありました。特に、このビット。私はこの方法を伝えることができるものから、アクティブなレコードの構文の説明 - beginner

person = Person.find(:first, :conditions => ["name = ?", "Mikey"]) 

は、最初の引数としてのシンボルをとり、シンボル/配列のキー/値の1項目のハッシュどのようなものか。これが正しいのですか?もしそうなら、なぜ私は突然中括弧{}を使わずにハッシュを指定できますか?

+2

「NEW」アクティブレコードの構文に一歩近づきたいかもしれませんが、今度は 'person = Person.where( 'name =?'、 'Mokey')と少し違います。 ' - > http://guides.rubyonrails.org/active_record_querying.html –

+1

@Mr_Nizzle:この特定の場合:' person = Person.where(:name => "Mikey")。最初のもの – tokland

+0

ミスタイプの申し訳ありません! –

答えて

4

Rubyのメソッドパラメータでは、通常の引数の後、ブロックの前に置かれるすべてのkey =>値のペアが1つのハッシュにバンドルされます。ですから、

my_method("hello", :something=>"yo!", :another_thing=>"bah!") 

を呼び出した場合my_methodは二つの引数は、文字列( "こんにちは")、およびハッシュ({渡されていることを意味している:=> "!よ" 何かを、:another_thing => "BAH! "})。

これは、ハッシュパラメータを示す中括弧と、ブロックを示す中括弧との間の混乱を防止します。また、Rubyには存在しない「名前付きパラメータ」をシミュレートする便利な方法もあります。

+0

追加の注意として、自由形式のハッシュ引数は最後の引数でなければなりません。そうしないと、明示的な中カッコを入れなければなりません。 '' foo(:a => 'b') 'ではなく、' foo(:a => 'b') 'でなければなりません。 ) '代わりに。一般に、ほとんどのインタフェースは、この理由で最後に引数ハッシュを定義します。 – tadman

+0

確かに - それは私が "普通の議論の後"で伝えることを意味していたものです。 –