Я использую камень Devise для аутентификации пользователей. У меня есть модель User и отношение модели Address, где каждый пользователь has_one :address
и каждый адрес belongs_to :user
. Когда я пытаюсь зарегистрировать нового пользователя, я получаю следующую ошибку при загрузке страницы: unknown attribute: user_id
. След указывает на линию <% resource.build_address...
, что видно на мой взгляд.Неизвестный атрибут 'user_id' с установленными вложенными атрибутами
Если я просто удалю эту строку из своего представления, страница загрузится, но ни один из полей вложенных форм не появится.
В консоли Rails я могу создать и сохранить адрес, а затем использовать этот сохраненный адрес в качестве атрибута для нового пользователя, который сохранит.
мнение заключается в следующем:
<% resource.build_address unless resource.address %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= f.email_field :email, :autofocus => true, placeholder: "Your email", class: 'input-block-level' %><br>
<%= f.password_field :password, placeholder: "Password", class: 'input-block-level' %><br>
<%= f.password_field :password_confirmation, placeholder: "Confirm password", class: 'input-block-level' %><br>
<%= f.text_field :favorite_cuisine, placeholder: "Favorite cuisine", class: 'input-block-level' %><br>
<%= f.fields_for :address do |address_form| %>
<%= address_form.text_field :street_one, placeholder: "Street", class: 'input-block-level' %><br>
<%= address_form.text_field :street_two, placeholder: "Street #2", class: 'input-block-level' %><br>
<%= address_form.text_field :city, placeholder: "City", class: 'input-block-level' %><br>
<%= address_form.text_field :state, placeholder: "State", class: 'input-block-level' %><br>
<%= address_form.text_field :zip, placeholder: "zip", class: 'input-block-level' %><br>
<% end %>
<% end %>
Моя модель Пользователь:
has_one :address, :dependent => :destroy
accepts_nested_attributes_for :address
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
:favorite_cuisine, :username, :address
validates_presence_of :email
validates_presence_of :address
Моя адресная модель:
belongs_to :user
attr_accessible :city, :state, :street_one, :street_two, :zip, :user_id
validates_presence_of :city
validates_presence_of :state
validates_presence_of :street_one
validates_presence_of :zip
Где я буду здесь не так?
Вы можете проверить в вашей схеме, которая адресует имеет user_id поле? (Держу пари, что нет). –
Вы правы, адреса не имеют поля user_id. Как я должен структурировать свою миграцию, чтобы добавить user_id к адресам и указать ссылку на пользователя? –