Railsの:belongs_toのを経由して、レコードを保存し、外部キーを設定します
-
21-09-2019 - |
質問
このコードを書くのより良い方法はありますか?
:それはちょうど私がすでに知っている必要があることは本当に 'のようなRailsのものがあるように私は感じて、右の私と一緒に座っていません。belongs_to :parent_in_use
belongs_to :parent_template
def after_create
new_parent_in_use = ParentInUse.create!(self.parent_template.attributes)
self.update_attribute(:parent_in_use_id, new_parent_in_use.id)
end
レコードを作成した後、私は、選択した親テンプレートを取って、それに基づいてparent_in_use
レコードを作成しています。この方法では、テンプレートを変更することができますし、IN_USEレコードは永遠に私の物と一緒に住んでます。どちらもParentInUseとParentTemplateクラスは、STIを使用して、親から継承します。
私は、これは十分に簡単であるべきと確信しているが、私は基本的に私が作成し、一回の操作でレコードを割り当てたい、どのように行うのか分からない。
解決
これは、あなたが探しているものを行います。
def after_create
self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end
しかし、他の変更を加えることなく、それはあなたに何か良いを行うことはありません。外部キーは、現在のモデルに格納されているので、この関連付けはafter_createコールバックによって作成された場合、ActiveRecordのは、変更を保存しません。新しいParentInUseオブジェクトが保存されますが、現在のモデルのデータベース行は、その対応するparent_in_use_idで更新されることはありません。
バックbefore_create呼び出しとして、それを呼び出して、物事がよりスムーズになります。
所属していません StackOverflow