0

割り当てられているユーザーへのリンクを含むすべてのアセットが表示されるインデックスページを作成しようとしていますが、

def index
 @assets = Asset.paginate(page: params[:page])
 @user = User.find(params[:id])
end

IDのないユーザーが見つかりませんでした。

index.html.erb-アセット

<%= provide(:title, 'Assets') %>
<h1>All assets</h1>
<%= will_paginate @assets %>
<ol class="assets">
    <%= render @assets %>
</ol>
<%= will_paginate @assets %>

_asset.html.erb部分的

<li>
<span class="id">JTC<%= asset.id %></span>
<span class="serial"><%= asset.serial_no %></span>
<span class="status">Status: <%= asset.status %></span>
<span class="type">Type: <%= asset.asset_type %><br/></span>
<span class="description">Description: <%= asset.asset_description %><br /></span>
<span class="comment"><em><%= asset.comment %></em></span>
<span class="timestamp">
    <br />Added <%= time_ago_in_words(asset.created_at) %> ago. <br /> Assigned to: <%= link_to 
    @user.name %>
    <br />Date Purchased: <%= asset.date_purchased %> 
</span>
</li>
4

1 に答える 1

1

@user = User.find(params[:id])は、の行に沿ったURLを期待しています/assets/40。40はIDです(40はユーザーではなくアセットのIDである必要があるため、それでも意味がありません)。にアクセスするだけ/assetsでは、idパラメータがないため、基本的には実行しようとしUser.find(nil)ます。これにより、エラーが発生します。

アセットがユーザーに属していると仮定すると、コントローラーの行を削除し、の代わりに@user = User.find(params[:id])使用するようにパーシャルを変更する必要があります。asset.user.name@user.name

ユーザーのN+1クエリ状況を回避するために、これを使用するようにコントローラーを更新できます。

@assets = Asset.includes(:user).paginate(page: params[:page])
于 2012-05-17T14:45:37.620 に答える