我一直在开发基于Hartl指南的网站。我想将密码重置功能移动到它自己的部分。
我创建了一个部分的_passreset.html.erb。基本上是_form的副本,只显示您的用户名并显示密码/ password_confirm字段。
但我甚至没有到达那里。在show.html.erb页面(个人资料页面)上,我有指向编辑和密码重置的链接。这是代码:
<% if current_user.admin? || current_user == @user %>
<%= link_to "Edit", edit_user_path(@user) %> |
<%= link_to "Password Reset", user_passreset_path(@user)%>
<% end %>
当我点击&#34;密码重置&#34;链接,我得到以下错误:
UsersController中的ActiveRecord :: RecordNotFound#show
无法找到具有&#39; id&#39; = passreset
源是我的用户控制器set_user函数:
def set_user
@user = User.find(params[:id])
end
新功能的路线如下所示:
resources :users do
resources :articles
get 'passreset'
end
rake路线显示此行:
user_passreset GET /users/:user_id/passreset(.:format) users#passreset
我也明确宣布了这条路线(获得&#39; users / passreset&#39;),但它并没有什么不同。
为什么要寻找&#39; passreset&#39;?我不明白。
我认为这不重要,但这是我的用户控制器的最新功能:
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
答案 0 :(得分:2)
如果查看路由输出,它会在user_id
中寻找嵌套路由的一部分
user_passreset GET /users/:user_id/passreset(.:format)
如果您在会员上制作路线,则该路线应再次基于:id
进行匹配。
resources :users do
resources :articles
member do
get 'passreset'
end
end