Я, вероятно, отсутствует что-то тривиальное ...Расщепление пользователя и профиля вопрос
У меня есть модель пользователя, что «» HAS_ONE UserProfile:
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
before_create :create_remember_token
has_many :user_roles, dependent: :destroy
has_many :roles, through: :user_roles
has_one :user_profile, dependent: :destroy
accepts_nested_attributes_for :user_roles, :user_profile, allow_destroy: true
validates :email, presence: true, format: {with: TextUtils::VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}
has_secure_password
validates :password, length: { minimum: 6 }
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.digest(token)
Digest::SHA1.hexdigest(token.to_s)
end
def admin?
in_role?(Role::ADMINISTRATOR)
end
def in_role?(role)
!self.roles.find_by_name(role).nil?
end
private
def create_remember_token
self.remember_token = User.digest(User.new_remember_token)
end
end
и у меня есть модель UserProfile, что «BELONGS_TO» Пользователь:
class UserProfile < ActiveRecord::Base
belongs_to :user
has_one :address, dependent: :destroy
accepts_nested_attributes_for :address
validates :first, :last, :ssn, :title, :division, :phone_home, :phone_mobile, :phone_work, :phone_work_ext,
:emergency_phone, :emergency_name, :emergency_relation, presence: true
validates :personal_email, format: { with: TextUtils::VALID_EMAIL_REGEX }
end
Когда я пытаюсь заполнения базы данных как таковой (или любой другой способ, где профиль присваивается пользователю):
# Admin
admin = User.create!(email: "[email protected]", password: "secret", password_confirmation: "secret",
user_profile: UserProfile.new(
first: "Admin",
last: "User",
address_attributes: {line1: "123 Fake Street", line2: "Suite 1", city: "Some City", state: "FL", zip_code: "11111"},
ssn: "123-45-6789",
phone_work: "(111) 222-3333",
phone_work_ext: "110",
personal_email: "[email protected]")
)
Я получаю следующее сообщение об ошибке:
rake aborted! ActiveRecord::UnknownAttributeError: unknown attribute: user_profile_id C:/work/Portal/db/seeds.rb:12:in `' Tasks: TOP => db:seed (See full trace by running task with --trace)
Я в недоумении, почему это происходит. Любая помощь будет оценена! Я использую Rails 4.1.4, если это имеет значение.
Спасибо, GhostGambler. Я пробовал это раньше, и даже сейчас создание не работает с той же ошибкой. Обратите внимание, что я изменил «user_profile:» и «address:» в вашем фрагменте на «user_profile_attributes:» и «address_attributes:» соответственно, иначе вместо хэшей ожидаются реальные объекты. – Vlad
Да, вы правы, ключи были неправильно названы. Но не имеет смысла, что вы получаете то же сообщение об ошибке? Я бы только ожидал этого сообщения об ошибке в двух случаях: либо ваши отношения с моделями неправильны (как вы их написали выше, я не вижу ошибки), либо вы передали объект в метод вместо хэша. – GhostGambler
Я согласен с вами, но это то, что происходит. К сожалению, я застрял. :) – Vlad