2016-07-11 20 views
0

Ich habe eine App mit einem Benutzermodell, das viele Adressen haben kann. Ich möchte in der Lage sein, dem Benutzer eine Adresse hinzuzufügen, wenn sie sich über verschachtelte Attribute anmelden. Ich benutze auch Devise für das Benutzermodell.Verschachtelte Attribute Formular nicht in den Ansichten anzeigen Rails 4

Modelle:

class Address < ActiveRecord::Base 
belongs_to :user 

end 
class User < ActiveRecord::Base 
devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

has_many :addresses 

accepts_nested_attributes_for :addresses 

end 

Registrierung Controller:

class Users::RegistrationsController < Devise::RegistrationsController 
before_action :set_user, only: [:show] 


def new 
    resource = build_resource({}) 
    resource.addresses.build 
    respond_with_navigational(resource){ render_with_scope :new } 
end 

def create 
    super 
end 



private 

def set_user 
@user = User.find(params[id]) 

end 

def user_params 
params.require(:user).permit(:email, :password, :first_name,     
:last_name, :phonenumber, :addresses_attributes => [:postcode, 
:housenumber, :streetname, :city, :town]) 

    end 
end 

Felder für paßgenau darstellbare Form:

<%= f.simple_fields_for :addresses do |address|%> 
    <%= address.input :housenumber %> 
    <%= address.input :postcode %> 
    <%= address.input :streetname%> 
    <%= address.input :town%> 
    <%= address.input :city%> 
    <%end%> 
+0

haben Sie herausfinden, wie dies zu tun? Ich stecke mit dem gleichen Problem – Mel

+0

Nein, ich gab es auf und machte das Design anders, obwohl ich bei der Arbeit an einem anderen Aspekt erkannte, dass meine benutzerdefinierte Controller nicht tatsächlich verwendet wurde, und es war immer noch mit dem Gerät. Ich würde vorschlagen, zu überprüfen, dass der richtige Controller verwendet wird, weil ich das Gefühl habe, dass das mein Problem war. – ZSOR

Antwort

0

Sie benötigen die folgende Methode, um Ihre Application hinzuzufügen:

class ApplicationController < ActionController::Base 
    # Your code 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_in) do |user_params| 
     user_params.permit(:email, :addresses_attributes => [:postcode, :housenumber, :streetname, :city, :town]) 
    end 
    end 
end 

Damit können Sie verschachtelte Attribute für das Geräte-Modell zulassen. Siehe die Repo-Seite und die Suche nach ‚verschachtelt‘ für weitere Informationen:

https://github.com/plataformatec/devise

+0

Ich habe versucht, das hinzuzufügen, und ich las das Repo durch, konnte aber nichts finden, was zu funktionieren schien. Irgendwelche anderen Ideen? – ZSOR

+0

Hast du das jemals funktioniert? Ich versuche genau das Gleiche zu tun ... – matthewalexander

0

Ich weiß, das ist ein bisschen alt, aber das jemand in der Zukunft retten kann. Nach dem configure_sign_up_params implementieren, müssen Sie es in der Aktion verwenden, erstellen, damit Ihre Users::RegistrationsController sollte wie folgt aussehen:

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :set_user, only: [:show] 
    before_action :configure_sign_up_params, only: [:create] 

    # more code bellow... 
    protected 

     def configure_sign_up_params 
      devise_parameter_sanitizer.permit(
       :sign_up, 
       keys: [:email, :password, :password_confirmation, 
       # put any other keys in here     
      ]) 
     end 
end 
Verwandte Themen