学習RoR(9)
あのあと別の悩んでいた部分もなぜかすっきりと解決できて、よしよしと思ったのもつかの間。今はまた新たなところで止まっている。
ひとつの item に対して、複数の edition が存在しうるのだけれど、 edition を削除していくときに、その edition を削除すると item に対する edition がまったく無くなってしまうようなときには、item も削除するようにメッセージを出してから確認して削除したい。で、この判断のところでうまくいかずにいる。
実際の削除ボタンで処理する remove_edition アクションで、
Edition.find(:all, :conditions => ['item_id = ?', @edition.item_id], :offset => 2)
のようにして nil だったら分岐すればいいだろうかと思ったのだけれど、ちょっとうまくいかない。エラーメッセージを見ているとタイミングの問題で失敗しているようなので(destroy から復帰できていない<削除されている。これはtransaction で回避できる?)、そのあたりを書き直せばいいのかなとは思うのだけれど。
それとも transaction を使うだけで済むのだろうか?
版型などのセレクトタグでのことは、版型データでテーブルを作ってしまうのが一番簡単なのではないかと。そんなにあれこれ小さなテーブルを作ってしまっていいだろうか? と思わないでもないのだけれど、オブジェクトと結びつけてということでやろうとするとそれが一番良さそうな感じがしている。<まだ試していない。
| 固定リンク
コメント
>destroy から復帰できていない<削除されている
このdestroyは、itemの削除ということですか? あと、エラーメッセージには何が出ているのでしょうか?
・editionの削除後にitemの削除に行き(でも、それだと「メッセージを出してから確認」とは違う動作だから違うのでしょうか)、そこで実際にはすでにeditionが存在しないという意味ですか?
投稿: arton | 2006.12.19 15:13
結論から言うと transaction をきちんと使うことで解決できました。リストをあげてないので状況がよく見えないですよね。
改めて書きますが、edition を削除しようとしたときに、削除後に最新の edition をチェックして item にその edition_id を記録しなおすようにしていて、そこでエラーがでるのを利用してエラーが出るときには削除せずにメッセージを出すようにしました。
唯一の edition でなくほかにもまだあるときには、そのまま削除するようにしています。
投稿: ムムリク | 2006.12.19 16:43