Как иметь дополнительную локальную переменную в частичном шаблоне в направляющих?

Я думал, что наверху моего частичного у меня будет что-то вроде этого

<% optional_width = default_value unless (defined? optional_width) 

Но у меня были непоследовательные результаты с этим, я думаю, что это не хороший способ сделать это. Что "корректный" путь состоит в том, чтобы сделать это в направляющих?

14
задан Janak 5 March 2010 в 08:57
поделиться

2 ответа

Прочтите раздел Передача локальных переменных в подшаблоны в ActionView :: Base docs

В основном в нем говорится, что вам следует использовать этот шаблон:

<% if local_assigns.has_key? :headline %>
  Headline: <%= headline %>
<% end %>

Для вас это может означать что-то вроде:

<div style="width: <%= local_assigns.has_key?(:optional_width) ? optional_width : 500 %>px;">
  <!-- filler -->
</div>

важно!

Согласно документам

Тестирование с использованием определено? заголовок работать не будет. Это ограничение реализации.

23
ответ дан 1 December 2019 в 10:18
поделиться

Хотя это не совсем соответствует вашему коду, это обычно делается с помощью оператора || .

<%  optional_width ||= default_value  %>

Это эквивалентно optional_width = optional_width || значение по умолчанию . Из-за оценки схемы выстрела , если optional_with «истина», то есть определено, а не nil , правая часть становится равной ему, и default_value даже не вычисляется. В противном случае правая часть была бы равна default_value . По сути, это то, чем вы хотите заниматься.

Хорошо, я допускаю, что это может не сработать для локальных пользователей партиала. Конкретная ситуация, которую я могу себе представить, заключается в том, что если при первом вызове рендеринга переменной optional_width было присвоено какое-то значение, а в последующем вызове render она вообще не упоминается, сохраняя ее значение с первого запуска. Но сейчас не могу сделать такую ​​проверку.

3
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: