2017-05-09 4 views
1

Könnte jemand den Unterschied zwischen diesen beiden erklären:Rubin Syntax (Schienen-Modelle)

sagen, dass ich ein Modell Artikel haben

innerhalb dieses Modell habe ich:

self.price 
self[:price] 

Ich gehe davon aus ein ruft ein Attribut (der Produktpreis) auf, während das andere eine Methode namens "Preis" aufruft?

Wenn das stimmt, welches ist das?

Antwort

0

Rails erstellt diese Modellattribute als Accessoren, die dynamisch die Methoden zum Abrufen/Festlegen des Werts erstellen. Es macht Spaß, auch in Ihren eigenen Klassen zu verwenden, schauen Sie hier: http://ruby-doc.org/core/Module.html#method-i-attr_accessor

+0

Also, wenn ich meine eigene Methode mit dem gleichen Namen wie ein Attribut erstellen, wird meine Methode nicht die Rails-Standard aufgerufen? – Brad

+0

Hier ist ein Beitrag, der detailliert beschreibt, wie Sie das erreichen möchten: http://StackOverflow.com/Questions/373731/Override-ActiveRecord-Attribute-Methods – ddubs

4

Beide Aufruf einer Methode:

  • erste ruft eine Methode :price.

  • zweite ruft eine Methode :[], :price als Argument übergeben.

können Sie prüfen, ob durch Ausführen

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

Grundsätzlich, wann immer Sie wollen wissen, wo das Verfahren herkommt, Sie Object#method verwenden können.

+0

Vielen Dank für die Erklärung. – Brad