2016-07-21 28 views
3

Derzeit arbeite ich an einem Edelstein, der ActiveRecords where überschreibt. Indem ich daran arbeitete, stolperte ich über zwei verschiedene find_by Implementierungen. Einer ist in der core und es verwendet eine Art von Cache, während der eine aus dem FinderMethods Modul where direkt ruft. Was ist der Unterschied zwischen diesen beiden Implementierungen? Wann wird was benutzt?Was ist der Unterschied mit find_by() vom Kern und dem von den FinderMethoden?

+0

Vielleicht ist es nur ich, aber eine Rails-Kernmethode wie 'where' zu ​​überschreiben, fühlt sich für mich wie eine schreckliche Idee an ... – spickermann

+0

Nun, beliebte Edelsteine ​​wie' globalisieren' tun das auch. Zum Glück gibt es viele Tests für ActiveRecord. – Robin

Antwort

2

Ich denke, es ist so: Wenn Sie etwas wie folgt verwenden:

User.find_by(...) 

Die ActiveRecord::Core#find_by genannt wird, als Kern in die Base enthalten ist, von dem Sie erben.

Aber wenn Sie etwas tun:

User.first.products.find_by(...) 

Die Active :: Relation (inklusive FinderMethodshere) wird FinderMethods#find_by

nenne ich weiß nicht, warum dies so umgesetzt wird, aber ich Sicher gibt es einen Grund dafür.