Первый аргумент, переданный edit_password_reset_url
, заменяет параметр :id
, который вы видите при запуске rails routes
(/password_resets/:id/edit(.:format)
).Документы по этому вопросу можно найти здесь .
Вы можете обновить его, чтобы использовать более релевантный параметр, такой как :token
в вашем случае, используя:
resources :password_resets, param: :token
Помощник по URL также принимает хэш аргументов, в которых вы можете указать дополнительные параметры, как вы делаете с email
.
Слегка ненужное дополнительное объяснение
Если бы вы использовали вложенный маршрут, скажем, edit_user_password_reset_url
, это было бы продуктом, похожим на users/:id/password_resets/:token/edit(.:format)
.То же самое по-прежнему применяется - первый аргумент помощника заполняет переменные параметры, хотя теперь будет принимать массив, то есть edit_user_password_reset_url([@user.id, @token])
/ конец немного ненужного дополнительного объяснения
Действие редактирования в вашем контроллере может быть пустым, хотя обычно назначает ресурс, который будет использоваться в представлении редактирования (/password_resets/edit.html.erb
или аналогичный).Обычно это форма, которая при отправке выполнит действие update
того же контроллера.
Таким образом, в этом случае вы можете захотеть, чтобы действие редактирования содержало следующее:
def edit
@user = User.find_by_reset_token(params[:id]) # or params[:token] if you update as above
end
Затем в окне редактирования вы можете добавить форму, позволяющую пользователю сбросить свой пароль.