Frage

Was ich versuche ist für folgende Aufgaben:

Zu jeder Zeit kann ein Benutzer ein aktives Profil hat. Dieses aktive Profil muss von einem Administrator genehmigt werden, um sicherzustellen, dass es mit den Regeln und Vorschriften des Aufstellungsort kompatibel ist. Wenn ein Benutzer sein Profil bearbeitet ihr öffentliches Profil ist nicht betroffen, bis der Administrator ihre Änderungen abmeldet. Wenn sie bearbeitet, während sein Profil ist in Überprüfung zu machen, werden ihre Änderungen an dem hervorragenden Profil zur Überprüfung angewendet und ist auf der Rückseite der Warteschlange geschoben wird.

Meine Modelle in etwa so aussehen:

class Profile < AR:B
    belongs_to :user
end

class User < AR:B
    has_many :profiles do
        def active
            ...
        end
        def latest
        end
    end
    def profile
        self.profiles.active
    end
end

Es gibt einen kleinen Twist ... soll der Benutzer nicht in der Lage sein, das Profil direkt zu bearbeiten, da die Profile Sammlung nicht ausgesetzt ist. Stattdessen bearbeiten sie ihre Benutzer und die Profilfelder werden dort gezeigt.

Was ist der beste Weg, dies zu verwalten? Derzeit bin ich mit:

accepts_nested_attributes_for :profiles

In dem Benutzer, aber das scheint ziemlich hacky. Im Idealfall der meisten dieser Logik im Modell leben würden, aber die andere Sache, die ich mit Flirten bin, ist die Verwendung eines Präsentator.

Alle Gedanken wäre sehr dankbar, lassen Sie mich wissen, wenn Sie mehr Informationen als Kommentar brauchen und ich werde diesen Beitrag entsprechend aktualisieren.

War es hilfreich?

Lösung

Vielleicht sollten Sie versuchen, von Benutzer zwei Beziehungen, die zu profilieren. Eine davon ist der, den sie durch die Benutzeroberfläche bearbeiten können, und die andere ist die, die vom Administrator genehmigt wird.

Es könnte funktionieren so etwas wie:

class User < AB:B

has_one :profile #the user-editable one one
has_one :active_profile, :class_name=>"profile" #the one shown

end

Jede Änderungen am Benutzerprofil durch die Form zeigen würde dann für den Admin (mit und Beobachter oder vielleicht auch nur und „after_save“ Filter). Wenn es es aproves, werden die Änderungen dann an die active_profile abgeladen ein, und irgendwo gezeigt.

Auf diese Weise können Sie eine saubere Form Schnittstelle haben, und wann immer sie es wieder bearbeiten, sie sehen das neueste (aber nicht genehmigt) Profil. Sie können auch die Queue mit der updated_at Spalte Reihenfolge die „ihre Änderungen an dem hervorragenden Profil zur Überprüfung angewendet werden und ist auf der Rückseite der Warteschlange geschoben“ zu gewinnen funcionality.

Andere Tipps

würde ich über diese gehen durch den Benutzer Modell mit einer Beziehung mit zwei Profilen wie oben als auch vorgeschlagen. Ein „Approved“ -Profil, und der Computer für die Bearbeitung, die in Ihrem Admin-Warteschlange geht.

Um jedoch die Übergänge zwischen „pending“ Profilen zu handhaben und „genehmigt“ Profilen i möglicherweise in einer State Machine hinzugefügt würde vorschlagen, die Übergänge zu handhaben. Die AASM Juwel hat sich für mich in einem aktuellen Projekt gut. ( http://github.com/rubyist/aasm/tree/master ), und ich glaube, Edge-Rails nur gebackenen Staat Machinage direkt als gut. ( http://github.com/rails/rails/commit/aad5a30bf25d8a3167afd685fc91c99f4f09cc57 )

Ihr Modell wie folgt aussehen könnte:

class User < AR:B

has_one :active_profile 
has_one :pending_profile

include ActiveRecord:: StateMachine

state_machine do
   state :approved
   state :pending
   state :rejected

   event :update_profile_pending do
    transitions :to => :pending, :from => [:approved], :on_transition => :send_to_admin_queue
  end

   event :update_profile_approved do
    transitions :to => :approved, :from => [:pending], :on_transition => :update_current_profile
   end

   event :update_to_rejected do
    transitions :to => :rejected, :from => [:pending]
  end
end

def send_to_admin_queue
  //method to handlesending pending profiles to admin for approval
end

def update_current_profile
 //method to handle updated profiles with changes
end

end

Sie könnten dann User.update Profil aufrufen anhängig! oder User.update Profil zugelassen! zwischen Ihrem Profil Staaten der Übergang und die Übergänge Rückrufe der Bearbeitung von Daten zwischen Ihrem aktiven Profil zu behandeln verwenden Senden und anhängigem Profil.

Soweit die nested_attributes_for mit Ihrer tatsächlichen Form verwenden, ich glaube nicht, dass ein Hack ist, habe ich es auch verwendet verschachtelte Attribute zu aktualisieren und es würde gut funktionieren. In diesem Fall wenn Sie nicht müssen, da Sie zwei Profile (eine öffentliche, eine pending).

Nur eine Idee! Denken laut hier!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top