3

RoR アプリケーションとモデル SomeModel があります。このモデルのビューがあり、知りたいのですが、ビューのパスを取得する方法はありますか? もちろん、このモデルインスタンスに使用できます

m = SomeModel.new
v = m.class.class_name.pluralize.downcase

それは機能していますが、もっと良い方法を知っていますか?:)

4

4 に答える 4

1

@ 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と呼ばれるものがあるため...)

于 2010-04-26T08:37:55.357 に答える
0

コントローラー層を介してモデルを操作するビュー。すべてのビューは、いくつかのルーティング/コントローラー アクションに対応しています。したがって、コントローラー名に関連するビューへのパス: app/views/some_controller/{bunch of files}.html.erb

ビューの dirname がモデル名を参照するとは限りません。したがって、ビューのディレクトリ名を見つけるための普遍的な方法はありません。

あなたのソリューションは適切ですが、すべての場合ではありません

于 2010-03-23T22:45:59.973 に答える
0

モデル内のビューへのパスが必要だと思われる場合は、コントローラーまたはヘルパーに属するロジックをモデルに追加している可能性があります。MVC ロジックを分割する方法を再検討する必要があります。

于 2010-04-27T18:32:20.627 に答える