Я думал, что наверху моего частичного у меня будет что-то вроде этого
<% optional_width = default_value unless (defined? optional_width)
Но у меня были непоследовательные результаты с этим, я думаю, что это не хороший способ сделать это. Что "корректный" путь состоит в том, чтобы сделать это в направляющих?
Прочтите раздел Передача локальных переменных в подшаблоны в 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>
Согласно документам
Тестирование с использованием
определено? заголовок
работать не будет. Это ограничение реализации.
Хотя это не совсем соответствует вашему коду, это обычно делается с помощью оператора ||
.
<% optional_width ||= default_value %>
Это эквивалентно optional_width = optional_width || значение по умолчанию
. Из-за оценки схемы выстрела , если optional_with
«истина», то есть определено, а не nil
, правая часть становится равной ему, и default_value
даже не вычисляется. В противном случае правая часть была бы равна default_value
. По сути, это то, чем вы хотите заниматься.
Хорошо, я допускаю, что это может не сработать для локальных пользователей партиала. Конкретная ситуация, которую я могу себе представить, заключается в том, что если при первом вызове рендеринга переменной optional_width
было присвоено какое-то значение, а в последующем вызове render
она вообще не упоминается, сохраняя ее значение с первого запуска. Но сейчас не могу сделать такую проверку.