Насколько мне известно, оператор «for» всегда будет потреблять время.
Когда длина списка растет, время выполнения также будет возрастать.
Я думаю, что, поиск подстроки в строке с оператором 'is' немного быстрее.
In [1]: t = ["abc_%s" % number for number in range(10000)]
In [2]: %timeit any("9999" in string for string in t)
1000 loops, best of 3: 420 µs per loop
In [3]: %timeit "9999" in ",".join(t)
10000 loops, best of 3: 103 µs per loop
Но я согласен с тем, что инструкция any
более читаема.
Используйте fields_for
внутренняя часть Ваше частичное. Это выполняет подобную задачу, но не перенося теги form. Посмотрите документы .
Вы могли инстанцировать нового экземпляра своего конструктора форм в контроллере, хотя это чувствует вид паршивых мне:
# in the controller
render :partial => {
:f => MyFormBuilder.new(:staff_member, @staff_member, template),
:skill_groups => @skill_groups,
:staff_member => @staff_member
}
, С другой стороны, Вы могли переместить больше логики обновления, чтобы быть стороной клиента, которая не потребует, чтобы Вы волновались о рендеринге чего-либо вообще. Вы могли просто обновить значения через JS. Не уверенный, если это работает на Ваш проект все же.