Я использую вложенные атрибуты для пользовательских адресов.Rails - проблема с вложенными атрибутами
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 %>
E-mail проверяется как уникальность. Поэтому, когда кто-то попытается войти в систему с уже принятым по электронной почте на адрес 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
пс: Ассоциация является один к одному. Как я могу назвать атрибуты адреса, если я не передаю их как скрытые.
Но если я не заставить создать адрес пользователя с нулевыми значениями для пользователя, как я могу позвонить это на странице обновления? Связь - один к одному. – user1301037
Итак, вам нужно иметь вложенную форму. – nzajt
Посмотрите, это старая версия рельсов, но идея такая же. Посмотрев на свой код некоторое время, вам, вероятно, нужно будет начать все заново. http://railscasts.com/episodes/196-nested-model-form-part-1. – nzajt