从我的用户索引页面,我想打开用户的详细信息页面(使用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
答案 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" %>
它会起作用。