Rails プロジェクトに Single-Table-Inheritance を使用しています。そして、スーパークラスに実装することで、サブクラス間でいくつかの共通関数の機能を共有できるかどうか疑問に思っていました。
スーパークラスのビューもリサイクルできますか? それとも、一般的な関数の新しいビューを作成する必要がありますか? これはあまり乾燥していません。DRYアプローチとは?を編集する必要がありますか、routes.rb
またはこれを動的に達成する別の方法はありますか?
ベスト、E.
Rails プロジェクトに Single-Table-Inheritance を使用しています。そして、スーパークラスに実装することで、サブクラス間でいくつかの共通関数の機能を共有できるかどうか疑問に思っていました。
スーパークラスのビューもリサイクルできますか? それとも、一般的な関数の新しいビューを作成する必要がありますか? これはあまり乾燥していません。DRYアプローチとは?を編集する必要がありますか、routes.rb
またはこれを動的に達成する別の方法はありますか?
ベスト、E.
まず、スーパークラス レベルで実装することにより、サブクラス間で確実に機能を共有できます。これが STI の大きな魅力の 1 つです。
ビューの質問については、コントローラーではなくモデルのサブクラス化について話していると思います。その場合、メイン モデル用の 1 つのコントローラー (通常のビューを使用) は通常、すべてのサブクラスに対して正常に機能します。ただし、フォームや作成/編集に関しては、少しトリッキーな問題がいくつかあります。特に、モデルのサブクラスをパラメーターから引き出して、他のすべてを更新した後に追加する必要があります。例えば:
def create
citation_class = params[:citation].try(:delete, :type)
@citation = citations.new(params[:citation])
@citation.type = citation_class
flash[:notice] = 'Citation was successfully created.' if @citation.save
respond_with @citation
end