2016-12-23 5 views
0

Als Ruby noob muss ich eine einfache Sache machen, aber es ist nicht klar für mich.Rails devise: Assoziation für Benutzer erstellen sign_up

Was zu tun ist, möchte ist folgendes:

Ich habe einen devise User-Modell mit einem 0.59 Verein „Account“

In der devise Registrierung Ansicht i für diese zusätzliche Formularfelder hinzufügen möchten Konto, und das ist, wo ich feststecke.

Es scheint, ich nicht das Konto Felder die Ansicht

beispielsweise hinzufügen, kann dies nicht funktionieren:

# address is a field of Account 
<%= f.text_field :address %> 

Wie kann ich das Account-Modell in den Rahmen zu bringen? Oder ist es eine Möglichkeit, so etwas wie dieses

<%= f.text_field :account['address'] %> 

ich wirklich keine Ahnung haben, zu tun, wie Konto in Umfang hinzuzufügen, oder wie kann ich den Benutzer Assoc Konto richtig zugreifen.

Thx für die Hilfe

+0

'accept_nested_attributes_for' ist, was Sie brauchen, denke ich. Suchen Sie danach und versuchen Sie es zu implementieren. – 31piy

Antwort

3

Sie müssen accepts_nested_attributes_for :account in der Lage verwenden Anmeldeformular hinzuzufügen Parameter aus . Whitelist diese Parameter durch Überschreiben der Devise-Methode configure_permitted_parameters.

def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [account_attributes: [:address]]) 
end 

Möglicherweise müssen Sie ändern, welche Parameter auf die Whitelist gesetzt werden müssen.

Dann in Sicht, müssen Sie fields_for wie

f.fields_for(:addresss) do |address_fields| 
    <%= address_fields.text_field :address %> 
end 

Hoffentlich verwenden, das das Problem löst. Versuchen Sie, nach verschachtelten Attributen zu suchen, wenn etwas nicht funktioniert.

1

Sie RegistrationsController von dort auf create Methode ersinnen außer Kraft setzen müssen, ändern account Datensatz zu erstellen, wenn der Benutzer erfolgreich anmelden

+0

stimme ich voll und ganz zu, aber ich kann keine zusätzlichen Felder in der Formularansicht hinzufügen, die keine Benutzer sind –

+0

Um zusätzliche Felder hinzuzufügen, müssen Sie fields_for verwenden Für Beispiel: '<% = form_for (@user,: url => registration_path ('user'),: html => {: autocomplete =>: aus},: remote => true) do | f | %> <% - user_detail = f.object.account || f.object.build_account%> <% = f.fields_for: Konto, Konto do | account_f | %> <% = account_f.text_field: name%> <% end %> <% end %> ' (nicht alles enthalten, was in das Formular eingeht) –

Verwandte Themen