2015-07-08 2 views
0

Я занимаюсь разработкой сайта на основе руководства Hartl. Я хочу переместить функциональность сброса пароля на свой собственный частичный.Rails -Couldn't find User with 'id' =

Я создал частичный _passreset.html.erb. По существу копия _формы, которая показывает ваше имя пользователя и отображает поля password/password_confirm.

Но я даже не добираюсь туда. На странице show.html.erb (страница профиля) у меня есть ссылки на Edit и Password Reset. Вот код:

<% if current_user.admin? || current_user == @user %> 
    <%= link_to "Edit", edit_user_path(@user) %> | 
    <%= link_to "Password Reset", user_passreset_path(@user)%> 
    <% end %> 

Когда я нажимаю на «Сброс пароля» ссылка, я получаю сообщение об ошибке следовать:
ActiveRecord :: RecordNotFound в UsersController # показать
Не удалось найти пользователя с идентификатором «» = passreset

источник моя пользователи функция контроллера set_user:

def set_user 
    @user = User.find(params[:id]) 
end 

маршрут для новой функции выглядит следующим образом:

resources :users do 
resources :articles 
get 'passreset' 
end 

рек маршруты показывает эту строку:

user_passreset GET /users/:user_id/passreset(.:format)     users#passreset 

Я также явно объявлен маршрут (получить «пользователей/passreset»), это не делает разницы.

Почему он ищет идентификатор «passreset»? Я не понимаю.

Я не думаю, что это важно, но это функция passrest от моего контроллера пользователей:

def passreset 
respond_to do |format| 
    if @user.update(user_params) 
    format.html { redirect_to @user, notice: 'Password was  successfully updated.' } 
    format.json { render :show, status: :ok, location: @user } 
    else 
    format.html { render :edit } 
    format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
end 
end 

ответ

2

, если вы посмотрите на выходе маршрута, он ищет user_id как часть вложенного маршрута

user_passreset GET /users/:user_id/passreset(.:format) 

если вы сделаете маршрут на члене, он должен соответствовать на основе :id снова.

resources :users do 
    resources :articles 
    member do 
    get 'passreset' 
    end 
end 
+0

Это заставило меня пройти мимо ошибки. Мне пришлось изменить ссылку, чтобы прочитать passreset_user_path. И теперь .... У меня другая ошибка :(Параметр отсутствует или значение пусто: пользователь. Он указывает на мой сильный оператор params. * Sigh * – SeattleDucati

+0

хорошо откройте новый вопрос, показывая вашу форму и сильные параметры но моя догадка заключается в том, что ваша форма - это просто form_tag, а не form_for @user, поэтому у вас нет параметров: user key, который находится под? – Doon

+0

Я собираюсь взломать его в утром, и откройте новый вопрос, если я не могу разобраться. Спасибо, Doon. – SeattleDucati