дополнительные местные переменные в рельсах частичные шаблоны: как я выхожу (определенный? foo) беспорядок?

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

<% foo = default_value unless (defined? foo) %>

Это, казалось, хорошо работало до недавнего времени, когда (ни по какой причине я мог различить), не прошел, переменные начали вести себя, как будто они были определены к нолю (а не неопределенные).

Как был указан различными услужливыми людьми на Так, в http://api.rubyonrails.org/classes/ActionView/Base.html говорится, чтобы не использовать

defined? foo

и вместо этого использовать

local_assigns.has_key? :foo

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

Могут/должны я просто заряжаю вперед и вношу это изменение во всех шаблонах? Есть ли ловкость, за которой я должен наблюдать? Как старательно я должен проверить каждого?

221
задан brahn 13 January 2010 в 11:55
поделиться

3 ответа

Я делаю так:

<% some_local = default_value if local_assigns[:some_local].nil? %>
319
ответ дан 23 November 2019 в 04:05
поделиться

Как насчет

<% foo ||= default_value %>

Здесь сказано "использовать foo, если это не ноль или не правда". В противном случае присвойте default_value foo"

.
84
ответ дан 23 November 2019 в 04:05
поделиться

Помощник может быть создан следующим образом:

somearg = opt(:somearg) { :defaultvalue }

Реализован как:

module OptHelper
  def opt(name, &block)
    was_assigned, value = eval(
      "[ local_assigns.has_key?(:#{name}), local_assigns[:#{name}] ]", 
      block.binding)
    if was_assigned
      value
    else
      yield
    end
  end
end

См. мой блог для получения подробной информации о том, как и почему.

Обратите внимание, что это решение позволяет передавать в качестве значения nil или false без его переопределения.

-6
ответ дан 23 November 2019 в 04:05
поделиться
Другие вопросы по тегам:

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