私は2つのモデルを持っていUser
ますStash
.
ユーザーには多くのスタッシュと default_stash があります。Stash には 1 人の所有者 (ユーザー) がいます。
ユーザーを作成する前に、Stash を作成し、その Stash を self.default_stash に割り当てます。Rails - ベスト プラクティス: 依存する has_one リレーションを作成する方法の指示に従って、Stash リレーションを作成しましたが、beens_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
Stash.rb
belongs_to :owner, class_name: 'User'
この時点で Stash は見つかりますがuser.stashes
、before_create ブロックで ID を返さないためuser.default_stash
、nil のままです。stashes.build
私が必要とすることは、User.rbに以下を追加することで達成できます
after_create :force_assign_default_stash
def force_assign_default_stash
update_attribute(:default_stash, stashes.first)
end
ただしbefore_create
、検証などのために、可能であればすべてをブロック内に保持することをお勧めします。