Атрибут «выбранный» простой формы установлен неправильно

В принятом ответе уже упоминается PEP 238 . Я просто хочу добавить быстрый взгляд за кулисы для тех, кто интересуется тем, что происходит, не читая весь PEP.

Python отображает такие операторы, как +, -, * и / к специальным функциям, например, a + b эквивалентен

a.__add__(b)

Что касается деления в Python 2, по умолчанию используется только /, который отображается на __div__, и результат зависит от типов ввода (например, int , float).

В Python 2.2 была введена функция __future__ division, которая изменила семантику деления следующим образом (TL; DR из PEP 238):

  • / отображается на __truediv__, который должен «возвращать разумную аппроксимацию математического результата деления» (цитата из PEP 238)
  • // отображается на __floordiv__, которая должна возвращаться польский результат /

С Python 3.0 изменения PEP 238 стали поведением по умолчанию, и в объектной модели Python не существует особого метода __div__.

Если вы хотите использовать тот же код в Python 2 и Python 3, используйте

from __future__ import division

и придерживайтесь семантики PEP 238 / и //.

0
задан Angel Garcia 1 March 2019 в 20:53
поделиться

2 ответа

  1. вместо «selected» укажите «value: params [: folder]»
  2. Я думаю, что более элегантное решение в контроллере, скажем, у вас есть модель «File». Поскольку значение может быть изменено и выбранное будет иметь неправильное значение
def new
  @file = File.new
  @file.folder = params[:folder]
end
0
ответ дан Igor Kasyanchuk 1 March 2019 в 20:53
поделиться

Решил это. Мне нужно было передать слаг к выбранному атрибуту, а не к имени. Если вы реализуете это, вы, вероятно, используете id вместо slug. В любом случае, это то, что сработало для меня.

<%= f.input :folder, 
  collection: current_user.folders, 
  label_method: :name, 
  value_method: :slug,
  selected: @folder.slug
%>
0
ответ дан Angel Garcia 1 March 2019 в 20:53
поделиться
Другие вопросы по тегам:

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