Для печати элементов последовательно используйте {} без указания индекса
print('[{},{},{}]'.format(1,2,3))
(работает с python 2.7 и python 3.1)
Во-первых, вы не хотите пытаться вставить код "между" действием контроллера и отрисовкой шаблона. Зачем? Потому что вы хотите, чтобы у действия контроллера была свобода выбора, какой ответ давать. Он может возвращать 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
. :)
У меня был бы метод @foo
, который возвращает полосу, таким образом вы можете использовать @ foo.bar
в своих представлениях.
<% @bar = @ foo.bar%>
# если вы действительно не хотите менять свои взгляды, но вы не слышали этого от меня :)
Иногда это называют «обновлением записи», «функциональным обновлением» или чем-то в этом роде. Он вычисляет новую запись того же типа, что и X, и поля которой инициализируются такими же значениями, как и в X, за исключением тех, которые перечислены после "с", которые инициализируются этими заданными значениями.
полезен для неизменяемых записей, как удобный способ взять такую запись и изменить в ней одну или две вещи (что на императивном языке вы обычно мутируете поля) без необходимости перечислять все поля, которые не изменились.
Это описано в руководстве OCaml раздел 6.7.3 , прокрутите вниз до «Записи», Это прямой путь.