2016-07-01 8 views
-1

ユーザーのインデックスページから、(link_toタグを使用して)ユーザーの詳細ページを開き、エラーメッセージを表示したい{:action => "show"、コントローラ:=> "users"、:id => nil}必要なキーがありません:[:id]link_to user_path(@user)not opening page

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

なぜ余分なループを実行すると、オブジェクトから単一のデータを抽出するのですか? – vipin

+0

@vipin:余分なループが何を意味するかわからない。インデックスページで1つのループを実行して、すべてのユーザーをリストアップしています(それぞれlist-group-item内にあります)。その後、個々のユーザーの開いているユーザーの詳細ページから。 –

+0

上記はshow.html.erbです – vipin

答えて

0

、あなたが@userを書かれていますどんな値も割り当てられていません。インスタンス変数のデフォルト値はnilなので、エラーを発生させる代わりにnilを渡すだけです。

変更

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

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

にそれは動作します。

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> 
+0

私のために働くことを求めている理由です。ありがとう –

+0

私のために働く!! thnx –