我有这样的模特:
class User
belongs_to :authenticity
end
class Authenticity
has_one :user
end
现在我为用户创建了真实性:
u = User.first; u.authenticity = Authenticity.create
现在我分配了新的真实性:
u.authenticity = Authenticity.create
现在我在我的数据库中有两个真实性:
irb(main):035:0> Authenticity.all
Authenticity Load (0.3ms) SELECT "authenticities".* FROM "authenticities"
=> #<ActiveRecord::Relation [
#<Authenticity id: 22, token: nil, created_at: "2015-09-15 08:18:09", updated_at: "2015-09-15 08:18:46", user_id: nil>,
#<Authenticity id: 23, token: nil, created_at: "2015-09-15 08:18:45", updated_at: "2015-09-15 08:18:46", user_id: "1">
]>
一个属于用户,一个没有任何用户(user_id: nil
)。我想要的是创建新的真实性,而不是在nil
字段中存储user_id
的真实性。我目前正在手动销毁旧的,但我很好奇我是否可以说某种方式为我做这件事。但是,我不想使用after_create
。对此有什么解决方案吗?
答案 0 :(得分:1)
您看到两条记录,因为您要创建两次,而是执行此操作
u = User.first
u.create_authenticity
您可以在创建Authenticity
记录
u.authenticity ||= Authenticity.create
如果您想删除旧的Authenticity
记录,请执行此操作
if u.authenticity
u.authenticity.destroy
u.authenticity = Authenticity.create
end
答案 1 :(得分:0)
datetime(27)
答案 2 :(得分:0)
您正在创建两次Authenticity对象。这就是为什么你的数据库中有两条记录的原因。您还有Authenticity
,它指定与cordova run android
类的一对一关联。当您为关联创建新记录时,Rails当然不会删除以前的对象。如果您需要删除关联的对象,则应该明确地执行此操作。