Ответ 1
Терминология в вашем вопросе немного запутана. Если они находятся в контроллере, и вы хотите выполнить код в другом методе действий в другом контроллере и отобразить его шаблон, вы должны перенаправить на это действие. Пусть говорят, что другой контроллер называется ContractsController
redirect_to :controller => "contracts", :action => "show_home_page"
Если вы просто хотите использовать шаблон представления из другого метода в качестве ответа от своего действия, вам просто нужно указать имя контроллера в параметре рендеринга. Это не вызовет действие, оно просто будет использовать его шаблон.
Например, если шаблон находится в папке для контроллера контрактов.
render :action => "/contracts/show_home_page", :layout=> false
Я думаю, что в этом случае вы говорите о частичном, который будет выглядеть как
render :partial => "/contracts/show_home_page"
Тем не менее,, что я вижу, вы понимаете, что вы действительно хотите вызвать несколько методов действий для рендеринга одной страницы. Это не так, как это работает. Вам нужно будет настроить объекты, которые будут ссылаться шаблонами в одном действии. Это одна из причин, по которой большинство разработчиков Rails помещают много кода в модели, поэтому настройка не повторяется по всем контроллерам.
Но есть и другой способ... где приходит волшебство JavaScript.
На вашей странице создайте такую функцию:
<script type="text/javascript" language="javascript">
function load_categories() {
<%= remote_function(:url => {:controller => "categories", :action => "list"},
:update => "categories")%>
};
</script>
Если вы вызываете это в onload даже на своей странице, он заменит div на id "categories" на ответ от действия, на которое ссылается.