Привет Я uprgaded с рельсов 3.2.12 до 4.0.0 большинство думает, что работает нормально, но я получил эту ошибку:Rails обновление: неверное число аргументов (2 на 1) для assign_attributes
Какова проблема в этом случае?
Привет Я uprgaded с рельсов 3.2.12 до 4.0.0 большинство думает, что работает нормально, но я получил эту ошибку:Rails обновление: неверное число аргументов (2 на 1) для assign_attributes
Какова проблема в этом случае?
Подпись сообщения изменена с двух аргументов на один. Сравнить v3.2.12 и v4.0.2: защита присваивания
assign_attributes(new_attributes, options = {}) # 3.2.12
assign_attributes(new_attributes) # 4.0.2
Rails 3 массы является устаревшей, и это является частью его. Защита атрибутов от массового присвоения была extracted into a gem. С его README:
You can also bypass mass-assignment security by using the
:without_protection
option.
В версии 4.x, вам не нужен вариант :without_protection
больше, потому что вы encouraged to use Strong Parameters.
Для плавного обновления, возможно, вы можете просто расслоить драгоценный камень protected_attributes
. Но обратите внимание, что «этот плагин будет официально поддерживаться до выпуска Rails 5.0».
Кроме того, вам не нужно использовать @user.send(:update_attributes, …)
, вы можете просто использовать @user.update_attributes(…)
.
Попробуйте 'send (" assign_attributes ", params [: user] .merge (without_protection: true))' – lx00st
Этот вопрос относится к сфере видимости, но зачем использовать '# send', если вы знаете, что собираетесь вызовите 'assign_attributes', вы просто замените его обычным' @ user.assign_attributes (params [: user]) ', а затем добавьте' @user.without_protection = true' –