1

我已经开始构建一个简单的 Rails 应用程序并使用 Devise 进行身份验证。我在用户登录后为他们创建了一个仪表板页面,它使用下面添加的 users_contoller:

class UserController < ApplicationController
    before_filter :authenticate_user!

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

我已将此用户#show 重命名为路线中的仪表板:

match '/dashboard', to: 'user#show'

我在 User show html 页面中创建了一个 if else 语句来查看它是否有效,如下所示:

<% if @user.lists.any? %>
    Cool you have lists
<% else %>
    OK No Lists
    <%= @user[:id] %>
<% end %>

不幸的是,这只是在尝试在浏览器中加载页面时呈现错误

 Couldn't find User without an ID

我不确定这是否只是一个设计设置或更基本的东西,如果这是一个非常菜鸟的问题,请提前道歉。

4

2 回答 2

2

当使用 devise 对用户进行身份验证时,当前身份验证用户被“存储”在名为“current_user”的帮助程序中。

快速解决您的问题应该将“UserController”中的代码更改为类似这样(同时保留其余功能):

class UserController < ApplicationController
    before_filter :authenticate_user!

    def show
        @user = params[:id].blank? ? current_user : User.find(params[:id])
    end
end
于 2013-01-05T13:49:32.963 回答
0

您的路线: match '/dashboard', to: 'user#show'不包含id参数,您需要按照@Immendes 的建议进行操作并使用current_user帮助程序,否则将您的路线更改为: match '/dashboard/:id', to: 'user#show'并发送 id

于 2013-01-05T16:09:16.067 回答