単一テーブル継承を使用するRailsアプリケーションをセットアップしましたが、子クラス用に別個のフォームを用意する必要があります。アプリケーションは、悪意のあるIPアドレスなど、セキュリティ侵害の指標のコレクションを保持します。だから私はほとんどの情報を保持するIndicatorと呼ばれるクラスを持っています。ただし、インジケーターがマルウェアハッシュの場合は、追加情報を収集する必要があります。そこで、Indicatorから継承するMalwareIndicatorという別のクラスを作成しました。それですべてがうまく機能しています。
ルートを落ち着かせて見栄えを良くしたかったので、config/routes.rbファイルにこれを入れました
resources :indicators
resources :malware, :controller => "indicators", :type => "MalwareIndicator"
それは非常にうまく機能します。単一のコントローラーを指すこれらすべてのルートがあります。しかし、コントローラーでは、複数のフォームを処理する方法がわかりません。たとえば、誰かがマルウェア/新規にアクセスした場合、Indicators#New関数が呼び出され、ユーザーがMalwareIndicatorを作成したいと考えていることがわかります。では、ユーザーを正しいフォームに送信するには、respond_toブロックはどのように見える必要がありますか?現在でも、ユーザーは新しいインジケーターフォームに移動します。
def new
if params[:type] == "MalwareIndicator"
@indicator = MalwareIndicator.new
else
@indicator = Indicator.new
end
@pagename = "New Indicator(s)"
respond_to do |format|
format.html # new.html.erb
format.json { render json: @indicator }
end
end
かなり近い気がします。一方で、私はすべてが間違っているかもしれないので、誰かが私を平手打ちして「ばかげたことをやめなさい」と言いたいのなら、私もそれに感謝するでしょう。