Rails 3.1 Mountable Engines: как использовать / шаблонировать его в другом приложении? - PullRequest
5 голосов
/ 09 августа 2011

Допустим, я создал монтируемый движок под названием «Сохо», в котором есть контроллер для «Пользователей».Я могу зайти в / users / 1, чтобы увидеть моего пользователя с идентификатором 1.

Внутри 'Soho' у меня есть файл application.html.erb.

Теперь давайте предположим, что я хочу«смешать» мой движок «Soho» в приложении под названием «Soho_test», и я установил свой движок в «/».Итак, в моем хост-приложении «Soho_test» я также могу зайти в / users / 1, чтобы увидеть моего пользователя с идентификатором 1. Это работает.

Мой вопрос: как я могу это сделать в моем хост-приложении?Soho_test », чтобы применить файл« Soho_test »application.html.erb к / users / 1 (страница профиля пользователя) вместо того, который используется в монтируемом движке« Soho »?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 24 августа 2011

Я нашел, как этого добиться, поэтому я отправлю свой ответ на свой вопрос, на случай, если кто-нибудь еще удивится. Это на самом деле довольно легко. Я должен был подумать об этом в первую очередь ...

Все, что вам нужно сделать, это создать папку в вашем /views/layouts/ с названием вашего движка. Так что по моему вопросу это будет /views/layouts/soho/. В эту папку поместите application.html.erb, который вы хотите иметь.

Вы можете сделать то же самое с частичными и другими представлениями. Просто создайте папку /views/soho/.../ и поместите туда свои файлы. Я не нашел задачу rake для копирования представлений движка в моем хост-приложении, поэтому я написал одно.

0 голосов
/ 14 августа 2011

После прочтения вашего вопроса несколько раз, я думаю, что все, что вы пытаетесь сделать, это переопределить макет для данного контроллера.

Если это так, просто укажите макет для использования в вашем контроллере, см.раздел 2.2.13.1 Определение макетов на основе каждого контроллера в Rails Guide for Layouts

Вот пример:

class UsersController < ApplicationController
   layout "users"
   #...
end
...