2009-07-10 3 views
0

В моем приложении rails я обрабатываю частичное на нескольких страницах, а в частичном - переменную. Так что в настоящее время, скажем, у меня есть 5 страниц, которые отображают: partial => "partialname", а внутри partialname - @variable.Как создать «частичную», которая имеет собственное действие?

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

Спасибо!

ответ

0

вы можете загрузить @variable с точки зрения:

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

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

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

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

 
<%=h @model.variable %> 
+0

Фактически, это может работать как решение! – Jess

+0

вам следует избегать model.variable, просто измените это на <% = h model.variable%> –

+0

вправо, спасибо - исправлены. – klochner

0

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

@my_var = MyModel.some_expensive_method 

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

def cached_some_expensive_method 
    @some_expensive_method ||= some_expensive_method() 
end 
2

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

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

1

Rails Sub-controllers?

Смотрите мой ответ на это.

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

Смежные вопросы