link_to user_path(@user)不打开页面

时间:2016-07-01 07:23:48

标签: ruby-on-rails

从我的用户索引页面,我想打开用户的详细信息页面(使用link_to标记)并收到错误消息没有路由匹配{:action =>" show&#34 ;,:controller =>"用户",:id => nil}缺少必需的密钥:[:id]

当我输入url ... / users / id(例如users / 1)时,我会得到正确的页面。尝试了link_to标签的许多替代方案。它应该是什么?

这是相关代码:

<ol class="list-group">
    <% @users.each do |user| %>
        <li class="list-group-item clearfix">
            <h3 class="pull-right"><small class="text-uppercase">created </small><%= user.created_at.to_time %></h3>
            <h2 class="h3"><%= user.first_name %> <%= user.last_name %><small> <%= user.username %></small></h2>
            <%= link_to "details", user_path(@user), class: "pull-right" %>
            <h4><%= user.email %></h4>
        </li>
    <% end %>
</ol>

在我的控制器中我有:

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

和route.rb:resources :users

2 个答案:

答案 0 :(得分:1)

试试这个: 在你显示动作时你定义@user,意味着只有单个用户,所以没有任何循环从对象中提取数据。

<ol class="list-group">
            <li class="list-group-item clearfix">
                <h3 class="pull-right"><small class="text-uppercase">created </small><%= @user.created_at.to_time %></h3>
                <h2 class="h3"><%= @user.first_name %> <%= @user.last_name %><small> <%= @user.username %></small></h2>
                <%= link_to "details", user_path(@user), class: "pull-right" %>
                <h4><%= @user.email %></h4>
            </li>
    </ol>

答案 1 :(得分:0)

在您的代码中,您编写了@user并且未分配任何值。由于实例变量的默认值为nil,它只是传递nil而不是引发任何错误。

更改

<%= link_to "details", user_path(@user), class: "pull-right" %>

<%= link_to "details", user_path(user), class: "pull-right" %>

它会起作用。