2010年6月25日金曜日

ぼやきまくる

 Rails の polymorphic association を調べていて、rails では クラスを継承できるから…うんぬんの記述を見つけた。冗談でしょ? foo_controller を継承して、bar_controller を作成した事がありますが、production 環境で、既に生成されたクラスを検索する時に bar_controller が foo_controller として表示されてしまうという酷い目にあいました。なんじゃこれ…?全然ダメじゃん…?と、ぼやきながら、継承を避けて DRY の原則を曲げて、泣く泣くコピペ・コーディングしました。
 Activescaffold の subform における更新も変です。昨日は、この問題を追っていましたが、簡単には解決できず、template オーバーライドで
_hoge_form_column.html.erb

<div>
<%= render :active_scaffold => "hoges", :constraints => { :fuga_id => @record.id }
-%>
</div>

解決しました。
そうでもしないと、has_many の関連レコードが、全部削除して、全部挿入されてしまいます。モデルで

:has_many => hoges, :dependent => :destroy

と指定しない場合には、全部削除の代わりに全部リンクが外され(fuga_id に nil がセットされる)、どんどんとレコードが増え続けます。仮に hoge モデルに対して belongs_to を指定しているモデルがあった場合には、どうするつもりなんでしょうか? ticket 353 の事ですが、habtm が前提となって書かれている気がします。enumlator と yield の嵐で、自己完結的に記述されていて、修正は難しいように感じました。ここは、バグの巣窟です。コントローラにて config.columns[:hoges].show_blank_record = false を指定すると、ここでは最後の1レコードが永遠に削除できません。逆に blank_record を表示するようにした場合、hoge の初期値に何かを設定すると、record.unsaved = true が働いてしまい。fuga 更新時には勝手に hoge のレコードが挿入されてしまいます。

0 件のコメント: