更改Rails上的Autodestroy

时间:2012-02-04 12:42:31

标签: ruby-on-rails-3 activerecord

例如

class User < ActiveRecord::Base
  has_one :avatar, :dependent => :destroy
end

class Avatar < ActiveRecord::Base
  belongs_to :user
end

如果我有一个具有头像的用户,然后执行类似

的操作,该怎么办?
old_avatar = user.avatar
new_avatar = Avatar.new
user.avatar = new_avatar
user.save
old_avatar.destroy

所以我不想手动执行最后一个命令(destroy)。 has_many有没有自动解码旧对象的选项?或许多人更好地使用其他东西而不是avatar =方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

为什么不更新旧头像而不是创建新头像:

avatar = Avatar.find_or_initialize_by_user_id(:user_id => user.id)
avatar.attributes = new_attributes
avatar.save

另外,如果您愿意,可以在after_save模型中创建Avatar回调。