如何在Rails中递归渲染一个动作?

时间:2011-01-21 03:11:30

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

假设我有一个与自身有一对多关系的模型Person(即Parent - > Child)。在给定show.html.erb上呈现@person时,我希望它还包含为父级呈现show.html.erb的结果。

基本上我想要

的正确语法

<%= render @person.person %>

我实际上尝试过手动

<%= render :file => "/persons/1.html.erb" %>

它不起作用。有人可以帮助我理解render的语法吗?感谢。

(请注意,我实际上有一个更复杂的模型,我正在渲染SVG文件,而不是HTML。)

2 个答案:

答案 0 :(得分:0)

将show.html.erb的大部分内容放在名为_person.html.erb的文件中,然后在show.html.erb中输入:

<%= render :partial => 'person', :locals => {:person => @person} %>

在_person.html.erb

中使用person代替@person

(请注意,文件名以下划线开头。)

答案 1 :(得分:0)

在Person模型中创建一个方法来获取相关人员的数组,例如父母:

def parents(person)
   Person.find(:all, :conditions => ...
end

在控制器中,获取父母:

@parents = Person.parents(someone)

在个人视图(show.html.erb)中,循环parent数组并将每个数组作为参数传递给局部视图:

<% @parents.each do |parent| %>
   <%= render :partial => 'info', :locals => { :person => parent } %>
<% end %>

创建部分视图:_info.html.erbperson是存储人员记录的本地变量,可以在部分表单中访问。