Как рекурсивно отрендерить действие в Rails? - PullRequest
0 голосов
/ 21 января 2011

Предположим, у меня есть модель Person, которая имеет отношение один-ко-многим с собой (т.е. Parent -> Child).Когда show.html.erb отображается на данном @person, я бы хотел, чтобы он также включал результат визуализации show.html.erb для родителя.

По сути, я хотел бы, чтобы правильный синтаксис для

<%= render @person.person %>

Я на самом деле пытался вручную сделать

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

, и это не сработало.Может кто-нибудь помочь мне понять синтаксис render?Спасибо.

(Обратите внимание, что у меня действительно более сложная модель, и я рендеринг SVG-файлов, а не HTML.)

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Создайте метод в модели Person для получения массива связанных людей, например, родители:

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

В контроллере, приведите родителей:

@parents = Person.parents(someone)

В личном представлении (show.html.erb) зацикливает родительский массив и передает каждый в частичное представление в качестве параметра:

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

Создание частичного представления: _info.html.erb, person - это локальная переменная, хранящая запись о человеке, и доступ к ней можно получить в частичной форме.

0 голосов
/ 21 января 2011

Поместите большую часть содержимого show.html.erb в файл с именем _person.html.erb, а затем в show.html.erb:_person.html.erb

(Обратите внимание, что имя файла начинается с подчеркивания.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...