Rails - 嵌套属性问题

时间:2016-08-01 20:18:46

标签: ruby-on-rails ruby nested-attributes

我正在使用嵌套属性来处理用户地址。

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

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

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

电子邮件被验证为唯一性。因此,当有人尝试使用已经收到的电子邮件登录时,地址参数将被传递为nil并且我收到错误:

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:该关联是一对一的。如果我没有隐藏传递,我该如何调用地址属性。

2 个答案:

答案 0 :(得分:0)

地址属于用户?如果是,您只需致电@ user.address

答案 1 :(得分:0)

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

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