2016-08-01 15 views
0

Ich verwende verschachtelte Attribute für Benutzeradressen.Rails - geschachtelte Attribute Problem

class User < ApplicationRecord 
accepts_nested_attributes_for :address, update_only: :true 

Ich gebe die Adresse ID als verstecktes Feld bei der Anmeldung.

<%= form_for (@user), :html => {:class => 'lead-form'} do |f| %> 
       <%= f.email_field :email, class:'form-control', placeholder: "Email", required: true %> 
       <%= f.password_field :password, class:'form-control', placeholder: "Senha", required: true %> 
        <%= f.fields_for :address do |addresses_form| %> 
        <%= addresses_form.hidden_field :address_id, :value => @address.id %> 
        <% end %> 
       <%= f.submit 'Pedir meu convite', class: "button lead-form-button" %> 
      <% end %> 

Die E-Mail wird als Eindeutigkeit validiert. Also, wenn jemand versuchen, mit einer bereits getroffenen E-Mail melden Sie sich an der Adresse params als null übergeben werden, und ich bekomme die Fehlermeldung:

NoMethodError in Users#create 
undefined method `id' for nil:NilClass 

Jede Idee, wie ich das beheben kann?

Hier ist mein Controller:

def new 
@user = User.new 
@address = @user.build_address 
end 

def create 
@user = User.new(user_params) 
if @user.save 
log_in @user 
flash[:success] = "Você está dentro. Esse é seu perfil! =) " 
redirect_to @user 
else 
    render 'new' 
end 
end 

private 
def user_params 
params.require(:user).permit(:id, :primeiro_nome, :sobrenome, :email, :cpf,  :telefone, :sexo, :data_de_nascimento, :password, address_attributes: [:id, :logradouro, :bairro, :cidade, :uf, :complemento, :cep]) 
end 

ps: Der Verein ist 0.59. Wie kann ich die Adressattribute aufrufen, wenn ich nicht als ausgeblendet gebe?

+0

Aber wenn ich nicht mit Gewalt eine Benutzeradresse mit null Werten Benutzer zu erstellen, wie kann ich anrufen es auf der Aktualisierungsseite? Der Verein ist eins zu eins. – user1301037

+0

Also, Sie müssen ein verschachteltes Formular haben. – nzajt

+0

Watch this, es ist eine ältere Version von Schienen, aber die Idee ist die gleiche. Nachdem Sie Ihren Code eine Weile angesehen haben, müssen Sie wahrscheinlich von vorn beginnen. http://railscasts.com/episodes/196-nested-model-form-part-1. – nzajt

Antwort

0

Adresse gehört dem Benutzer? Wenn ja, Sie rufen Sie einfach @ user.address

0

Vielleicht sollten Sie versuchen, mit try Methode:

<%= addresses_form.hidden_field :address_id, :value => @address.try(:id) %>