Какой жесткий способ ссылаться на переменную, которая не может быть определена в частичном? - PullRequest
2 голосов
/ 11 августа 2011

В моих партиалах есть несколько локальных переменных, которые могут передаваться или не передаваться шаблоном, который их отображает, например: on_question_page.Если я на странице, я передаю это как истину, но в другом месте я пропускаю это.

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

Это означает, что я получаю много кода, напримерэто наверху моих частичек:

on_question_page = defined?(on_question_page) ? on_question_page : false

Грязный.Есть ли более чистый способ доступа к этим необязательным переменным?

Ответы [ 4 ]

1 голос
/ 11 августа 2011

вы можете использовать ||= оператор

on_question_page ||= false
1 голос
/ 11 августа 2011

Вы можете использовать on_question_page ||= false для назначения false, если on_question_page не определено или false или nil, то есть что-то, что оценивается как false при тестировании с логическими операторами.

0 голосов
/ 11 августа 2011

Я думаю, что решением было бы использовать привязки и помощника:

# whatever_helper.rb
def local_set(ref, view_binding)
  eval(ref.to_s, view_binding)
rescue NameError
  false
end

# my_neet_view.html.erb
<h1>Question</h1>

<%= local_set("on_question_page", binding) %>

Связывания позволяют нам передавать контекст оценки представления помощнику и выполнять всю грязную работу там.Это перемещает логику из вида в помощника.

0 голосов
/ 11 августа 2011

Как насчет определения значения по умолчанию в позиции, которая всегда включена, и переопределения его в вашей части?

Таким образом, вам не нужно проверять, доступно ли оно, и вы даже можете легко изменить значение по умолчаниюесли требуется.

...