2

私は Rails で STI を使用しており、Car、Truck など、さまざまなタイプのサブクラスを持つ Vehicle オブジェクトを持っています。これは単純なアプリ用なので、この場合は STI で問題なく動作しますが、あらゆる種類の車両レコードを作成できる単一のフォームを作成するのに問題があります。

次のルーティングを使用します。

resources :vehicles
resources :cars, :controller => 'vehicles'
resources :trucks, :controller => 'vehicles'

/cars と /trucks ルーティングをセットアップして、両方が同じフォームを指すようにすることができます。ただし、フォームは車両コントローラーを指しており、フォームの Vehicle オブジェクトを生成しているため、/cars url が Car オブジェクトを作成する必要があることを知る方法がありません。

/cars が Car.new または Report.new(:type => "Car") を使用してフォームのオブジェクトを作成することを本質的に知っているフォームを指すルーティング システムをセットアップしようとしています。/vehicles/:subclass のようなルーティング システムを動作させ、コントローラで params[:subclass] を使用することを考えましたが、そのようなルーティングを行う方法がわかりませんし、Rails によって引き起こされる他のルーティング エラーを回避することもできません。 「STIマジック。

URL を解析して値を取得することはいつでもできますが、それは危険で危険な方法のように思えます。

これを行うためのRailsの方法について誰かがアドバイスや経験を持っているかどうか知りたい. ありがとう!

4

1 に答える 1

0

すべての車両に同じフォームを使用したいので、オブジェクト タイプを除いてすべてのフィールドが同じであると想定しています。それでは、ユーザーが作成したいオブジェクトのタイプをユーザーが選択できるように、フォームにコンボ ボックスを用意してみませんか?

その後、コントローラーの作成アクションで永続化された適切なオブジェクトを処理できます。

于 2011-01-19T18:15:05.400 に答える