アーカイブ

親クラスとしてform_forしたい。 このエントリーを含むはてなブックマーク はてなブックマーク - 親クラスとしてform_forしたい。

2008 年 8 月 11 日 コメント 2 件
class Curry < ActiveRecord::Base; end
class SeafoodCurry < Curry; end
class VegetableCurry < Curry; end

という関係のクラスがあって、

map.resources :curries

という定義がしてある場合の話。
すべてCurryとして編集したかったのだけれど、

<% form_for(@curry) do |f| %>

のところで詰まってしまった。
[13:05 追記] @curryはSeafoodCurryやVegetableCurryのインスタンスです。
こう書いたら、

undefined method `seafood_curry_path' for #<ActionView::Base:0xb7149864>

だとか

undefined method `vegetable_curry_path' for #<ActionView::Base:0xb72efdd0>

のように、子クラスでルートをつくろうとしているらしく、おこられてしまう。ただインスタンスを投げているだけだからこれはしかたない。

で、問題はここから。form_forを呼ぶときにアップキャストすればいいだけだと思ったのだけれど、そもそもキャストってないじゃないか、と。
ドキュメントを読んだら

Module: ActionView::Helpers::FormHelper

Resource-oriented style

<% form_for @post do |f| %>

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>

となるらしいのでこれをベタ書きで対応したのだけれど、いかんせん長すぎる。
なんかスマートな方法があるんじゃないかと思うのだけれど、どこかで道を間違ったのかなぁ。

カテゴリー: Rails タグ: