2016-07-05 6 views
0

Ich habe ein Ruby-Objekt, xForm, die von Form erbt.Was ist `delegate` in einer Rails-Objektdatei?

class xForm < Form 
    # code 
end 

Es gibt einen Abschnitt in der Form Datei # Delegations genannt

delegate :id, :xyz, 
     :email, :email=, 
     ... 
     to: :user 

Ich habe nicht vor mit Formularobjekten oder Delegationen behandelt, und war nicht in der Lage, Informationen zu finden, die Google Suche.

Kann jemand erklären, wofür sie auf hohem Niveau verwendet werden?

+0

http://stackoverflow.com/questions/20873591/how-rails-delegate-method-works –

Antwort

2

Delegate werden verwendet, wenn Sie einen Benutzer einen Wert einfachen Zugriff auf ein zugeordnetes Objekt

In Ihrem Beispiel Ihre Form hat. Um auf E-Mails zuzugreifen, könnten Sie fortlaufend Folgendes eingeben: my_form.user.email oder Sie könnten Delegierung verwenden (wie in Ihrem Beispiel), was bedeutet, dass Sie einfach my_form.email eingeben können und das Formular herausfindet, wo Sie die E-Mail erhalten.

Es ermöglicht Ihnen, die Eingabe zu reduzieren, aber auch Implementierungsdetails zu verstecken.

http://apidock.com/rails/Module/delegate erklärt es ziemlich gut, wenn Sie mehr

wollen Typischerweise wird dies für Formularobjekte verwendet, so dass Sie eine flachere params-Struktur in der Ansicht zu bauen, die das Formular enthält. Wenn Sie also sowohl :email als auch :email= delegieren, können Sie ein Feld :email im Formular my_form benennen ... und dann im Controller können Sie einfach my_form = MyForm.new(params[:my_form]) verwenden, anstatt die zugehörigen Objekte separat instanziieren und die jeweils spezifischen Attribute übergeben zu müssen.

+0

Ist das 2. ': email =' etwas hinzufügen oder nur ': email' würde das gleiche tun? –

+1

Der Unterschied zwischen den beiden ist ': email =' ist ein Verfasser nach Konvention, während ': email' ein Leser ist. Wenn Sie den Wert einer Eigenschaft ändern möchten, können Sie den Writer folgendermaßen verwenden: 'my_form.email = 'chris @ so.com'' Während Sie den Wert lesen, würden Sie' my_form 'eingeben .email #() => 'chris @ so.com''. Denken Sie daran, sagte ich per Konvention, weil Sie es auch anders wählen könnten. – oreoluwa

+0

Wie @oreoluwa sagt - es erlaubt Ihnen, sowohl den Schreib-als auch den Leser zu verwenden. In der Regel bedeutet dies, dass Sie ein E-Mail-Feld auf dem Formular in der Ansicht hinzufügen und dann die Parameter als 'form.new (params)' an das Formular übergeben können - ich könnte dies zu meiner Antwort hinzufügen. –

Verwandte Themen