Изменить значение в хэше параметров перед его сохранением?

Почему-то это не работает

user_params[:height] = user_params[:height].to_i * 100
User.new(user_params)

Он просто сохраняет параметр высоты как 1,8, когда он должен быть равен 180 (другими словами, он не изменяется, как указывает код).

Как мы можем просто изменить параметр в хэше параметров перед сохранением хэша параметров?

что я пробовал

Я пробовал то, что выше

Я также пробовал user_params[:height] = (user_params[:height].to_i * 100).to_s, но это тоже не сработало.

Я могу подтвердить, что это работает на обычном хэше:

h = {a: 1, b: 2}
=> {:a=>1, :b=>2}

h[:a] = h[:a] * 10
=> 10

h
=> {:a=>10, :b=>2}

Поэтому я не могу понять, почему это не сработает с хэшем params


person stevec    schedule 18.12.2020    source источник


Ответы (1)


Это неправильный ответ, потому что я не могу объяснить, почему это работает, но мне пришлось создать новый хэш, чтобы он работал:

Замените это:

user_params[:height] = user_params[:height].to_i * 100
User.new(user_params)

с этим:

u = user_params.to_h
u[:height] = u[:height].to_i * 100
User.new(u)

Затем он работает, как ожидалось

person stevec    schedule 18.12.2020
comment
также нет ответа, но вот интересное чтение: http://joshfrankel.me/blog/modifying-strong-parameter-values-after-a-request/ - person Andreas Gebhard; 18.12.2020