Направляющие: Установите общую переменную экземпляра через несколько действий контроллера

Для печати элементов последовательно используйте {} без указания индекса

print('[{},{},{}]'.format(1,2,3))

(работает с python 2.7 и python 3.1)

16
задан JasonSmith 4 June 2009 в 07:56
поделиться

3 ответа

Во-первых, вы не хотите пытаться вставить код "между" действием контроллера и отрисовкой шаблона. Зачем? Потому что вы хотите, чтобы у действия контроллера была свобода выбора, какой ответ давать. Он может возвращать XML, JSON, только заголовки, перенаправление, ничего и т. Д. Вот почему после того, как фильтры выполняются после того, как ответ был отрендерен.

Во-вторых, вы не хотите использовать патч обезьяны Fixnum . Я имею в виду, может быть вы знаете, а я нет. По крайней мере, не часто, и только если я получаю от этого совершенно ужасную семантическую выгоду, например, возможность сказать 3.blind_mice . Обезьяна, исправляющая его для случайного использования, как это, кажется головной болью обслуживания в будущем.

Вы упоминаете о рефакторинге всех контроллеров. конкретный код case в фильтр before и запускать их последовательно. Что напомнило мне ... @foo одинаково во всех случаях? Если это так, то фильтр «один перед» будет работать нормально:

before_filter :do_common_stuff
def do_common_stuff
  @foo = common_foo
  @bar = do_something_with @foo
end

Это вполне законный подход. Но если @foo переходит от контроллера к контроллеру ... ну, у вас есть еще несколько вариантов.

Вы можете разделить свои фильтры до двух половин и настроить по одному для каждого контроллера.

# application_controller:
before_filter :get_foo, :do_something_common
def do_something_common
  @bar = do_something_with @foo
end

# baz_controller:
def get_foo
  @foo = pull_from_mouth
end

#baf_controller:
def get_foo
  @foo = pull_from_ear
end

Но вы знаете, если это фильтр простой случай, который не требует доступа к базе данных или доступа к сети или чего-то в этом роде ... чего в вашем случае нет ... не убивайте себя. И не переживайте. Добавьте это в помощника. Они здесь для того, чтобы помочь. По сути, вы просто преобразуете некоторые данные представления в форму, которая в любом случае немного удобнее. Помощник - это мой голос. И вы можете просто назвать его next_url . :)

23
ответ дан 30 November 2019 в 17:39
поделиться

У меня был бы метод @foo , который возвращает полосу, таким образом вы можете использовать @ foo.bar в своих представлениях.

<% @bar = @ foo.bar%> # если вы действительно не хотите менять свои взгляды, но вы не слышали этого от меня :)

4
ответ дан 30 November 2019 в 17:39
поделиться

Иногда это называют «обновлением записи», «функциональным обновлением» или чем-то в этом роде. Он вычисляет новую запись того же типа, что и X, и поля которой инициализируются такими же значениями, как и в X, за исключением тех, которые перечислены после "с", которые инициализируются этими заданными значениями.

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

Это описано в руководстве OCaml раздел 6.7.3 , прокрутите вниз до «Записи», Это прямой путь.

4
ответ дан 30 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

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