Railsの:belongs_toのを経由して、レコードを保存し、外部キーを設定します

StackOverflow https://stackoverflow.com/questions/1762653

質問

このコードを書くのより良い方法はありますか?

:それはちょうど私がすでに知っている必要があることは本当に 'のような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呼び出しとして、それを呼び出して、物事がよりスムーズになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top