Вложенный атрибут update_attributes использует вставку, а не обновление

У меня есть класс пользователя и вложенного профиля, который выглядит следующим образом:

class User < ActiveRecord::Base
  has_one :profile
  attr_accessible :profile_attributes
  accepts_nested_attributes_for :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
  attr_accessible :name
end

user = User.find(1)
user.profile.id  # => 1
user.update_attributes(profile_attributes: {name: 'some name'})
user.profile.id  # => 2

Я не понимаю, почему rails выбрасывает старый профиль и создает новый.

Использование

user.profile.update_attributes({name: 'some name'})

просто обновляет текущий профиль, как и ожидалось. Но в этом случае я не использую accepts_nested_attributes_for

Кто-нибудь знает, почему обновление происходит таким образом? Я бы предпочел не иметь базу данных строк профилей, не связанных ни с одним пользователем.

28
задан Jason 30 March 2012 в 13:36
поделиться