开发者

How to recursively render an action in Rails?

Suppose I have a model Person which has a one to many relationship with itself (i.e. Parent -> Child). When show.html.erb is rendered on a given @person I would like it to also include the result of rendering of show.html.erb for the parent.

Essentially I would like the correct syntax for

<%= render @person.person %>

I actually tried manually doing

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

and it didn't work. Can someone help me understand the syntax of render? Thanks.

(Note that I actually have a more c开发者_如何学Pythonomplicated model and I am rendering SVG files, not html.)


Put most of the content of show.html.erb in a file called _person.html.erb and then in show.html.erb have this:

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

Use person instead of @person in _person.html.erb

(Note that the file name starts with an underscore.)


Create a method in Person model to fetch an array of related people, e.g. parents:

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

In controller, fetch the parents:

@parents = Person.parents(someone)

In person view (show.html.erb), loops the parents array and pass each to the partial view as a parameter:

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

Create a partial view: _info.html.erb, the person is a local variable storing a person record, and can be access within the partial form.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜