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| %>
となるらしいのでこれをベタ書きで対応したのだけれど、いかんせん長すぎる。
なんかスマートな方法があるんじゃないかと思うのだけれど、どこかで道を間違ったのかなぁ。
コメント
@curryにはCurryのインスタンスが入ってるんすか?
おーそれ書いてなかったですね、それぞれSeafoodCurryやVegetableCurryのインスタンスが入ってます。