1

ContactEmail、ContactLetter、および ContactCall がすべて継承されるモデルとして ContactEvent を使用して、単一テーブルの継承を設定しています。

しかし、ルーティングとコントローラーの作成方法に困惑しています。

たとえば、Email 型の新しい ContactEvent を作成するとします。

次の方法を希望します。

new_contact_event_path(contact, email)

これは、Contact モデルと Email モデルからインスタンスを取得します。

内部では、 contact_event_controller が知る必要があると思います...

   @contact_event.type = (params[:email]) # get the type based on what was passed in?
   @contact_event.event_id = (params[:email]) #get the id for the correct class, in this case Email.id

これがどのように機能するのかわかりません....

4

2 に答える 2

3

同様の問題がありました。

ここで私がそれをどのように解決したかを見てください。

于 2011-02-15T00:31:55.747 に答える
0

リソースの種類ごとにコントローラー (および場合によってはビュー) を用意します。したがって、ContactEmail 用のコントローラー、ContactLetter 用のコントローラーなどを追加します。基本クラスの ContactEvent 用のコントローラーは気にしないでください。次に、パスは次のようになります。

new_contact_email_path(@contact) or new_contact_letter_path(@contact)

コントローラーのアクションは、それが表す適切なモデルを使用します。つまり、次のようになります。

@contact_email = ContactEmail.new(params[...])

タイプを渡して 1 つのコントローラーで適切なオブジェクトを構築するのではなく、3 つのタイプのリソースを別々に保つことができれば、作業はずっと楽になります。欠点は、フロントエンドでより多くのリンク/フォーム/ビューが必要になる場合があることですが、アプリケーションによっては、ユーザーの観点からは悪いことではない場合があります。

于 2010-05-27T09:14:18.197 に答える