私のアプリのすべてshow
のアクションには、すべてのモデルに対して同じテンプレートがあります(これは管理者ポータルタイプのインターフェイスです)。show.html.erb
これらのモデルはすべて継承していると思います。
コントローラーはすべて、ExplicitResourcesを使用するため、親ビューに表示resource
されているモデルの属性を表示するために使用する、などのいくつかのヘルパー変数にアクセスできます。resource.attributes
私がやりたいのは、各モデルに表示されている属性をホワイトリストに登録することです。これを行うには2つの方法を考えました...1つ目は、モデルの継承元のクラスでメソッドを定義することです。たとえば、メソッドが呼び出さattr_visible
れ、モデルの各属性を定義します。このアプローチが気に入らない理由は、モデルにビューロジックが多すぎるためです。むしろ、モデルにビューを提供し、ビューに表示内容を決定させたいと思います。
2番目のアプローチは、この質問の内容です。ファイルを作成し、表示/app/views/users/show.html.erb
するユーザーの属性を設定したいのですが、次のように言います。
@attributes = [:name, :email, :etc]
次に、この質問の冒頭で説明した親ビューにそれらを渡します。そのビューは、ループして@attributes
必要な属性を表示できるようになります。
super
ビューから「」タイプのメソッドを使用することはできますか?ビューの継承について私が読んだすべてのことは、ビューがディレクトリ構造内のどこにあるかに基づいてロードされ、その後は運が悪いことを示唆しています。
編集:私は自分がやりたいことをやった。/ app / views/usersディレクトリに次のような部分的な_show.html.erbを定義しました。
<% @attributes = ['name', ...] %>
そして、親ビューで、<%= render "show" %>
ループする前に呼び出します@attributes
。これは機能しますが、呼び出したときに実際には何もレンダリングしていないため、不格好に感じますrender
。もっと良い方法はありますか?