2017-05-09 5 views
1

誰かがこれら二つの違いを説明してもらえ:私は1つを想定していルビー構文(レールモデル)

self.price 
self[:price] 

は私が持っているモデル内のモデルの製品

を持っていると言います属性(商品価格)を呼び出す一方、もう一方は「価格」というメソッドを呼び出します。

これは本当ですか、どちらがどちらですか?

答えて

0

Railsは、値を取得/設定するためのメソッドを動的に作成するアクセサーとしてこれらのモデル属性を作成します。あなた自身の授業でもお楽しみください。http://ruby-doc.org/core/Module.html#method-i-attr_accessor

+0

属性と同じ名前の独自のメソッドを作成すると、メソッドが呼び出されて、デフォルトのレールではなくなりますか? – Brad

+0

これを達成したいと思われる投稿があります:http://stackoverflow.com/questions/373731/override-activerecord-attribute-methods – ddubs

4

メソッドを呼び出す両方:

  • 最初のものは方法:priceを呼び出します。

  • 第2の方法は、:[]というメソッドを呼び出し、:priceを引数として渡します。

あなたは

self.method(:[]) 
#=> #<Method: User(ActiveRecord::AttributeMethods)#[]> 

を実行することにより、基本的にはいつでもあなたは方法がどこから来る、あなたがObject#methodを使用することができ、知りたいことを確認することができます。

+0

ありがとうございます。 – Brad

関連する問題