1

このコードを記述するより良い方法はありますか? それは私にぴったりではありません.私はすでに知っておくべき本当に「レールのような」何かがあるように感じます:

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 を使用して Parent から継承します。

これは十分に簡単であると確信していますが、その方法がわかりません。基本的には、レコードを作成して 1 回の操作で割り当てたいと考えています。

4

1 に答える 1

0

これはあなたが探していることを行います。

def after_create 
  self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end

ただし、他の変更がなければ、何の役にも立ちません。外部キーは現在のモデルに保存されているため、この関連付けが after_create コールバックによって作成された場合、ActiveRecord は変更を保存しません。新しい ParentInUse オブジェクトは保存されますが、現在のモデルのデータベース行は対応する parent_in_use_id で更新されません。

これを before_create コールバックとして呼び出すと、物事がよりスムーズに進みます。

于 2009-11-19T17:24:19.977 に答える