Как иметь необязательную локальную переменную в частичном шаблоне в rails? - PullRequest
14 голосов
/ 05 марта 2010

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

<% optional_width = default_value unless (defined? optional_width) 

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

Ответы [ 2 ]

23 голосов
/ 05 марта 2010

Прочитайте Передача локальных переменных в суб-шаблоны в 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>

важно! * * 1013 По документам Тестирование с использованием defined? headline не будет работать. Это ограничение реализации.

3 голосов
/ 05 марта 2010

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

<%  optional_width ||= default_value  %>

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...