清晰的方式来渲染STI对象而不重复部分?

时间:2012-07-10 03:57:45

标签: ruby-on-rails ruby-on-rails-3

以下是完整的错误导致我:

使用{:locale => [:en],:formats => [:html],:handlers => [:erb,:builder,:coffee]}缺少部分publisher_groups / publisher_group。搜索:blah blah blah

在组织展示视图中:

<%= render @organization.groups %>

在/views/groups/_group.html.erb中:

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

组模型和组织模型中存在关系。该错误引用PublisherGroup。 Group模型具有三种类型的STI,到目前为止,除了指定类型之外什么都不做。如何使这个渲染器正常运行,因为所有@ organization.group对象都是组的子类?

2 个答案:

答案 0 :(得分:13)

默认情况下,尝试渲染活动模型对象会尝试查找名为table_name/class_name

的部分

特别是对于STI层次结构,它将为每个类寻找不同的模板。这由to_partial_path实例方法控制,该方法返回部分

的路径

如果您在组

上覆盖该方法
def to_partial_path
  'groups/group'
end 

然后所有子类将使用相同的部分。

答案 1 :(得分:2)

我唯一能想到的是,如果你的模型被命名为publisher_group,它将检查那些foldes。因为你正在以团体作为惯例。如果不是这样,我建议直接指定路径作为一个简单的解决方案:

<%= render :partial => "publisher_groups/publisher_group", :collection => @organization.groups %>