我有 2 个模型,User
并且Stash
.
一个 User 有很多 stash 和一个 default_stash。一个 Stash 有一个所有者(用户)。
在创建用户之前,我希望它构建一个 Stash 并将该 Stash 分配给 self.default_stash。按照此处的说明Rails - Best-Practice: How to createdependent has_one 关系我创建了 Stash 关系,但是我不能同时“创建”belongs_to 关系。
用户.rb
has_many :stashes, foreign_key: :owner_id
belongs_to :default_stash, class_name: 'Stash', foreign_key: :owner_id
before_create :build_default_stash
def build_default_stash
self.default_stash = stashes.build
true
end
存储.rb
belongs_to :owner, class_name: 'User'
此时可以找到 Stashuser.stashes
但user.default_stash
仍然为零,因为stashes.build
在 before_create 块中没有返回 id。
我需要的可以通过将以下内容添加到User.rb来实现
after_create :force_assign_default_stash
def force_assign_default_stash
update_attribute(:default_stash, stashes.first)
end
但是如果可能的话,我更愿意将所有内容都保留在before_create
块内,以进行验证等。