передача значений в partial в rails 3

Вот как я передаю значения/переменную частичному:

<%= render "partials/banner", :locals => {:text_1 => t(:"main.home.banner_text_1"),
                                          :text_2 => t(:"main.home.banner_text_2") } %>

затем в частичном:

 <%= text_1 %> <%= text_2 %>

но получаю "неопределенную локальную переменную или метод text_1"

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

Спасибо!


person bogumbiker    schedule 11.07.2010    source источник
comment
У меня возникло бы искушение просто поставить ‹%= t(main.home.banner_text_1) %› прямо в партиале — вам это сойдет с рук? Или они действительно переменные?   -  person sarnold    schedule 11.07.2010


Ответы (2)


Если у вас есть что-то, что должно отображаться во всех ваших представлениях, вы также можете создать метод application_helper, например: banner('Text', 'Content')

Попробуй это:

Главная страница:

<%= render :partial => 'layouts/test',
           :locals => {:text_1 => t(:'text_1'), :text_2 => t(:'text_2')}
%>

Частичное:

<%= text_1 %> <%= text_2 %>
person Warren Noronha    schedule 11.07.2010
comment
спасибо добавление :partial =› наконец решил проблему. Интересно, почему без него не работает? В любом случае да, мне нужно, чтобы это отображалось во всех моих представлениях - можете ли вы предоставить более подробную информацию о том, как должен выглядеть вспомогательный метод баннера ('текст', 'контент')? ваше здоровье - person bogumbiker; 11.07.2010

Я считаю, что Rails 3 изменил способ передачи частичных переменных примерно так:

<%= render :partial => 'layouts/test',
       :text_1 => t(:'text_1'), :text_2 => t(:'text_2') %>

Rails проанализирует это, и поскольку :text_1 не является известным ключом (например, :collection или :as), он передаст его самому партиалу.

Вы можете получить к нему доступ через text_1 или text_2.

person Andrew K    schedule 28.04.2011