Frage

Ich habe zwei Active Modelle mit hasMany / belongsTo Verein:

class User < ActiveRecord::Base
  has_many :letters
end

class Letter < ActiveRecord::Base
  belongs_to :user
end

Das User-Modell hat ein revision_number Attribut, auf die ich den belongs_to Verein Umfang haben möchte, so wird der Buchstabe zugeordnet zu einem Benutzer sowohl user.id und user.revision_number.

Ich habe versucht, mit dem: Bedingungen Schlüssel wie in der API-Dokumentation dokumentiert:

class Letter < ActiveRecord::Base
  belongs_to :user, :conditions => "revision_number = #{client_revision}"
end

aber diese Versuche Client-Revision auf dem Briefklasse aufrufen, nicht die Instanz von Brief. Könnte jemand mich in die richtige Richtung weisen die belongs_to Verband richtig für Scoping?

Ich verwende die Akten-as-revidierbar Plugin Version der Nutzer Modell.

War es hilfreich?

Lösung 2

Schließlich herausgefunden, was ich brauchte, war so etwas wie zusammengesetzte Schlüssel, die Active Rails nicht unterstützt. Die Lösung (bis jetzt zumindest) war benutzerdefinierte Client-Zugriffsmethoden auf dem Brief zu schreiben, die zusammengesetzten Schlüssel (id und revision_number) zu unterstützen:

class Letter < ActiveRecord::Base
  def client
    Client.find_by_id(self.client_id).try(:find_revision, self.client_revision)
  end

  def client=(c)
    self.client_id = c.id
    self.client_revision = c.revision_number
  end
end

class Client < ActiveRecord::Base
  acts_as_revisable

  has_many :letters
end

Mit diesem Setup-Client # 1.letters wird ein Array von beiden Buchstaben abzurufen, aber Letter # 2.client wird Kunde # 1R2 abrufen, während Letter # 2.client 1R4 Client-Nummer abruft:

Client         id:    1    1    1    1    1    1
       rev_number:    1    2    3    4    5    6

Letter         id:         1              2
        client_id:         1              1
  client_revision:         2              5

Immer noch nicht sicher, ob dies der beste Ansatz für dieses Problem ist, aber es scheint jetzt zu arbeiten.

Andere Tipps

Ich habe eine harte Zeit zu verstehen, warum Sie die belongs_to zu Umfang auf diese Weise wollen. Korrigieren Sie mich, wenn ich falsch bin, aber es könnte besser sein, so etwas zu tun. Ich gehe davon aus Sie irgendeine Art von Versionskontrollsystem soll:

class User < ActiveRecord::Base
  has_many :letters
end

class Letter < ActiveRecord::Base
  has_many :revisions, :class_name => "LetterVersion"
  belongs_to :current, :class_name => "LetterVersion"
end

class LetterVersion < ActiveRecord::Base
  belongs_to :letter
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top