Как я могу создать «частичное», которое имеет свое собственное действие? - PullRequest
0 голосов
/ 10 июля 2009

В моем приложении rails я отрисовываю партиал на нескольких страницах, и в этом пароле есть переменная. Итак, в настоящее время, допустим, у меня есть 5 страниц, которые визуализируют: частичный => «частичное имя», а внутри частичное имя является @variable.

Можно ли сделать так, чтобы частичное имя имело свое собственное действие с экземпляром @variable внутри, вместо того, чтобы @variable вызывался 5 раз от каждого действия, которое отображает частичное?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 11 июля 2009

Я бы создал before_filter для всех методов, которым требуется общее поведение.

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

1 голос
/ 11 июля 2009

Суб-контроллеры Rails?

Смотрите мой ответ по этому вопросу.

Очень похожий метод, здесь используются фильтры перед использованием либо наследования контроллера, либо модулей при необходимости.

0 голосов
/ 11 июля 2009

Итак, это проблема кода, выполняемого 5 раз за запрос, который вы не хотите делать? Мол, у вас есть частичное и в нем:

@my_var = MyModel.some_expensive_method

Если это так, вы можете просто кэшировать результат в модели:

def cached_some_expensive_method
  @some_expensive_method ||= some_expensive_method()
end
0 голосов
/ 10 июля 2009

вы можете загрузить @variable из вида:

 &lt% @variable = Variable.find(:whatever) %>

но некоторые считают эту дурную практику несоблюдением строгого MVC. Это имеет преимущество поддержки кеширования фрагментов из коробки:

&lt% cache({:variable_id => :whatever})  do %>
 &lt% @variable = Variable.find(:whatever) %>
 . . . 
&lt% end %>

Существует ли общая модель, отображаемая в основных представлениях, которой можно делегировать доступ к переменной?

&lt%=h @model.variable %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...