2016-04-07 5 views
0

Ich arbeite an einer Frage und Antwort Art von System, so dass eine Frage kann abgestimmt werden und die Antwort kann abgestimmt werden. Ich habe eine polymorphe Stimme, so dass eine Frage und eine Antwort viele Stimmen hat. Aber ich möchte alle Stimmen einer Antwort auf die Frage schalten. Wenn es nur eine Assoziation war, was ich tun konnte:Auf der Suche nach einer besseren Art der Aktualisierung der Assoziation einer polymorphen Tabelle

Answer.first.votes.first.update(voteable: Question.first)

aber dies wird für mehrere Verbände nicht.

Ich habe versucht zu tun:

Answer.first.votes.update_all(voteable: Question.first)

aber es hat einen Fehler zurückgegeben, dass es nicht die Spalte voteable

ich eine andere Art und Weise kennen das gleiche Ergebnis zu erreichen, ist finden könnte:

Answer.first.votes.update_all(voteable_type: "Question", voteable_id: 1)

aber ich wollte sicher sein, dass es keinen anderen Weg gibt seine.

+0

Ich bin mir ziemlich sicher, das ist, wie Sie es zu tun haben, – SomeSchmo

Antwort

0

Nein, dies ist nicht möglich. Nach dem Kommentar von einem Benutzer:

Ich bin nicht sicher, was die Pläne für update_all sind, aber Dokumentation ist eher ziemlich klar, dass es nicht wie andere Beziehung Methoden funktioniert. Es instanziiert Objekte nicht, es gibt nur die Anzahl der aktualisierten Datensätze zurück, nicht ActiveRecord :: Relation, es sendet einfach SQL direkt an die Datenbank. Sogar Beispiele werden mehr "sql like" als "rails like" geschrieben. Der Zweck dieser Methode besteht darin, viele Datensätze schnell zu aktualisieren.

Quelle: https://github.com/rails/rails/issues/17072

Verwandte Themen