2016-08-01 214 views
0

我对用户地址使用嵌套属性。Rails - 嵌套属性问题

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

我在登录时将地址标识作为隐藏字段传递。

<%= 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 %> 

该电子邮件被验证为唯一性。所以,当有人试图与已采取的电子邮件地址PARAMS作为零通过登录和我得到的错误:

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

任何想法如何解决呢?

这里是我的控制器:

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:该协会是一对一的。如果我不通过隐藏的方式,我怎样才能调用地址属性。

+0

但是,如果我不强迫创建具有零值,以用户的用户地址,我怎么能叫它在更新页面?该协会是一对一的。 – user1301037

+0

所以,你需要有一个嵌套的形式。 – nzajt

+0

注意这一点,它是一个老版本的轨道,但想法是一样的。看了你的代码一段时间后,你可能需要重新开始。 http://railscasts.com/episodes/196-nested-model-form-part-1。 – nzajt

回答

0

地址属于用户?如果是的话,你刚才叫@ user.address

0

也许你应该尝试使用try方法:

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