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

<%= 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"

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

Благодарность!

12
bogumbiker 11 Июл 2010 в 13:51
У меня возникнет соблазн просто поместить <% = t ("main.home.banner_text_1")%> прямо в партиал - можете ли вы уйти от этого? Или они действительно переменные?
 – 
sarnold
11 Июл 2010 в 14:09

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 %>
28
Warren Noronha 11 Июл 2010 в 15:57
4
Спасибо, добавив ": partial =>", наконец, решил проблему. Хотите знать, почему без него не работает? В любом случае, да, мне нужно, чтобы это отображалось во всех моих представлениях - не могли бы вы предоставить более подробную информацию, как должен выглядеть вспомогательный метод banner ('text', 'content')? ваше здоровье
 – 
bogumbiker
11 Июл 2010 в 17:00

Я считаю, что 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

12
Josh M. 6 Апр 2014 в 04:58