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 参数,因此它尝试基本上 do 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 回答