2013-10-09 3 views
6

Ich habe folgende Arbeits has_many mit einem proc einen Parameter für den Kontext zu erfassen:Convert Rails 4 has_many von Zustand mit proc, wo

has_many :subclass_point_analytics, :conditions => proc {"assessment_id = #{self.send(:assessment_id)}" }, :foreign_key => 'gid', :dependent => :destroy 

Ich benutze Rails 4 und es ist (zu Recht) über die Verwendung klagen von: Bedingungen. Nach 30 Minuten und vielen Versuchen kann ich nicht herausfinden, wie man: Bedingungen in -> {wo ...} konvertiert. Ich würde jemanden mit Kenntnissen der proc-Syntax schätzen, um mir zu helfen, das zu korrigieren.

+0

Haben Sie eine Lösung für Ihr Problem gefunden? – Thomas

Antwort

15

dies nur tun:

has_many :subclass_point_analytics, -> (object) { where("assessment_id = ?", object.assessment_id) }, :foreign_key => 'gid', :dependent => :destroy 

Objekt ist Ihre eigentliche Instanz. Passen Sie auch auf: die aufrufbare muss die erste Sache sein (: Bedingungen neigen dazu, am Ende zu sein)

+0

Arbeitete perfekt für mich. Empfehlen Sie auch, die Variable 'Objekt' in einen domänenspezifischen Namen umzubenennen. – raeno

+1

Ich möchte nur hinzufügen, dass ich das immer und immer wieder benutzt habe, wo es "notwendig" war und es funktionierte wie ein Zauber. Danke @Thomas für die Antwort. – TJChambers

+0

wie dies in Schienen 3.2 zu tun? –

0

würde ich mit so etwas wie dies starten:

has_many :subclass_point_analytics, -> { where("assessment_id = #{self.send(:assessment_id)}") }, :foreign_key => 'gid', :dependent => :destroy 
+0

Das ist, wo ich auch gestartet habe, aber da das proc Element fehlt, funktioniert es nicht. Meine Frage ist, wie man das proc Element während der Konvertierung behält. – TJChambers

+0

Es scheint seltsam, dass der Proc sogar notwendig ist. Ist es möglich, dass die subclass_point_analytics zum selben Modell gehören, aber mehr als eine assessment_id haben? Wenn ja, wie würden Sie sie dann mit der Assoziation wiederfinden? Es scheint, als ob es in Ordnung sein sollte, die Bedingungen ganz fallen zu lassen. – davidfurber

+0

Es ist nicht möglich, dass es mehrere Bewertungen hat, aber die Bedingung wird verwendet, da assessment_id den Primärschlüssel vorgibt und Teil eines Partitionsschlüssels ist. Der Leistungsunterschied ohne ist 1000x mit der Größe des Datensatzes. – TJChambers