4

レールが私に投げかけている完全なエラーは次のとおりです。

{:locale=>[:en]、:formats=>[:html]、:handlers=>[:erb、:builder、:coffee]} の一部の publisher_groups/publisher_group がありません。検索した場所: 何とか何とか何とか

組織表示ビューで:

<%= render @organization.groups %>

/views/groups/_group.html.erb:

<p><%= group.name %></p>
<p><%= group.type %></p>

関係は、グループ モデルと組織モデルの両方に存在します。エラーは PublisherGroup を参照しています。Group モデルには 3 つのタイプの STI があり、現在はタイプを指定するだけで何もしません。すべての @organization.group オブジェクトがグループのサブクラスであるため、このレンダーを適切に動作させるにはどうすればよいですか?

4

2 に答える 2

14

デフォルトでは、アクティブなモデル オブジェクトをレンダリングしようとすると、呼び出されたパーシャルを見つけようとします。table_name/class_name

特に STI 階層の場合、クラスごとに異なるテンプレートが検索されます。to_partial_pathこれは、パーシャルへのパスを返すインスタンス メソッドによって制御されます。

グループでそのメソッドをオーバーライドすると

def to_partial_path
  'groups/group'
end 

次に、すべてのサブクラスが同じパーシャルを使用します。

于 2012-07-10T07:17:56.143 に答える
2

私が考えることができる唯一のことは、モデルの名前が publisher_group である場合、それらのフォルダーがチェックされるということです。代わりに、慣例としてグループを使用しています。そうでない場合は、簡単な解決策としてパスを直接指定することをお勧めします。

<%= render :partial => "publisher_groups/publisher_group", :collection => @organization.groups %>
于 2012-07-10T04:00:03.810 に答える