2015-04-30 2 views
0

Привет Я uprgaded с рельсов 3.2.12 до 4.0.0 большинство думает, что работает нормально, но я получил эту ошибку:Rails обновление: неверное число аргументов (2 на 1) для assign_attributes

enter image description here

Какова проблема в этом случае?

+0

Попробуйте 'send (" assign_attributes ", params [: user] .merge (without_protection: true))' – lx00st

+2

Этот вопрос относится к сфере видимости, но зачем использовать '# send', если вы знаете, что собираетесь вызовите 'assign_attributes', вы просто замените его обычным' @ user.assign_attributes (params [: user]) ', а затем добавьте' @user.without_protection = true' –

ответ

6

Подпись сообщения изменена с двух аргументов на один. Сравнить 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(…).