Rails - 找不到用户身份' =

时间:2015-07-08 00:41:12

标签: ruby-on-rails ruby

我一直在开发基于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

1 个答案:

答案 0 :(得分:2)

如果查看路由输出,它会在user_id中寻找嵌套路由的一部分

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

如果您在会员上制作路线,则该路线应再次基于:id进行匹配。

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