2010-12-05 4 views
0

私はRailsが初めてです。以下の2つの方法で同じ結果が得られることがわかりましたが、コードを理解できません。instance_name [:column_name]とinstance_name.column_nameの違いは何ですか?

[ ]は、配列の演算子でなければなりません。なぜ私は、次の方法でそれを使用することができます。

コード1:

drummer = Drummer.find(1) 
drummer[:name] 
=>"Jojo Mayer" 

コード2:

drummer = Drummer.find(1) 
drummer.name 
=> "Jojo Mayer" 

答えて

1

は実際に重要な違いがあります。

あなたはセッターをオーバーライドすることにより、値の処理のいくつかの並べ替えを行う必要がある場合:

class Drummer 
    def name= value 
    self[:name] = value.capitalize 
    end 
end 

その後ドラマーの[:name]は、あなたがオーバーライドを回避することができます。

3

違いはありません。 ActiveRecord:基本インスタンスメソッド[]は同じ値を返すread_attributeを呼び出します。

[]この方法の目的は、例えば、可変と属性名を通過できるようにすることである:

key = :name 
drummer[key] 
    =>"Jojo Mayer" 
関連する問題