我正在尝试创建一个索引页面,其中显示所有资产,包括指向分配给他们的用户的链接,但是当我使用
时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 partial
<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>
答案 0 :(得分:1)
@user = User.find(params[:id])
期待/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])