私の背景
私はPHP開発者です。15年になります。Rubyは私にとって新しいものです(私の新しい挑戦)!
現在の設定
ユーザーモデルでDeviseを使用しています。
Rails:3.2.1
デバイス:2.1.2
使用事例
ユーザーが(Deviseコントローラーを介して)登録するときに、Userレコードだけでなく、Fooレコードも自動的に作成したいと思います。Fooレコードの作成を処理するafter_createを作成しました。
Class User < ActiveRecord::Base
after_create :make_foo
def make_foo
Foo.create(
:name => name,
:user_id => id
)
end
end
Class Foo < ActiveRecord::Base
belongs_to :user
end
症状
Fooレコードが作成されていないときに(検証など)、Userレコードが作成されたままになるという問題がありました(私はそれを望んでいませんでした)。after_createに、ユーザー作成をロールバックするRaiseExceptionを追加しました。
ただし、例外がスローされるよりも、いくつかの優れたエラー処理が必要です。現在、その例外を含む500エラーページが表示されます。失敗の理由とともにフォームを再度表示できるようにしたいと思います。
Class User < ActiveRecord::Base
after_create :make_foo
def make_foo
foo = Foo.create(
:name => name,
:user_id => id
)
if !foo.valid?
raise Exception.new('Foo creation failed.')
end
end
end
助けを求める
助言がありますか?