RoR アプリケーションとモデル SomeModel があります。このモデルのビューがあり、知りたいのですが、ビューのパスを取得する方法はありますか? もちろん、このモデルインスタンスに使用できます
m = SomeModel.new
v = m.class.class_name.pluralize.downcase
それは機能していますが、もっと良い方法を知っていますか?:)
RoR アプリケーションとモデル SomeModel があります。このモデルのビューがあり、知りたいのですが、ビューのパスを取得する方法はありますか? もちろん、このモデルインスタンスに使用できます
m = SomeModel.new
v = m.class.class_name.pluralize.downcase
それは機能していますが、もっと良い方法を知っていますか?:)
@ fl00rが言ったように、いいえ、これを行う一般的な方法はありません。すべてのビューの名前は個々のアプリケーションの実装に依存するためです(すべてのコントローラーがリソースコントローラーであるとは限りません)が、ヘルパーを作成して、そうしないようにすることもできます。m.class.class_name.pluralize.downcase
頻繁に入力する必要があります。
module ViewPathHelper
def resource_view_path(model_obj, action)
"#{model_object.class.class_name.pluralize.downcase}/#{action}"
end
end
そうするための1つの方法になります。
これはやや奇妙な要求のようです-とにかくビューパスは何が必要ですか?非常に多形的なことをしていますか?(polymorphic_pathと呼ばれるものがあるため...)
コントローラー層を介してモデルを操作するビュー。すべてのビューは、いくつかのルーティング/コントローラー アクションに対応しています。したがって、コントローラー名に関連するビューへのパス: app/views/some_controller/{bunch of files}.html.erb
ビューの dirname がモデル名を参照するとは限りません。したがって、ビューのディレクトリ名を見つけるための普遍的な方法はありません。
あなたのソリューションは適切ですが、すべての場合ではありません
モデル内のビューへのパスが必要だと思われる場合は、コントローラーまたはヘルパーに属するロジックをモデルに追加している可能性があります。MVC ロジックを分割する方法を再検討する必要があります。