Как edit_password_reset_url (some_id_here) разрешается до https://example.com/password_resets/some_id_here/edit? - PullRequest
0 голосов
/ 13 июня 2018

Я смотрел на Изучите учебные пособия по RoR , и у нас есть этот маршрут:

edit_password_reset GET    /password_resets/:id/edit(.:format)     password_resets#edit

Я не понимаю, как эта строка:

<%= edit_password_reset_url(@user.reset_token, email: @user.email) %>

Будет переводить в:

https://example.com/password_resets/<some token here>/edit?email=<user email here>

Более конкретно, откуда рельсы узнают, что первый параметр (@user.reset_token) должен входить в :id часть URL?

Функция контроллера PasswordResetsController edit определена, но пуста.

1 Ответ

0 голосов
/ 13 июня 2018

Первый аргумент, переданный 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

Затем в окне редактирования вы можете добавить форму, позволяющую пользователю сбросить свой пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...