我知道必须有一个非常简单的解决方案,但我无法弄清楚如何。
在拍卖展示视图中,我正在显示所有出价的列表,其中包含有关投标人(=已投标的用户)。设置新出价时,user_id已成功保存在出价表中。
我想显示投标人名称而不是他的ID。 (使用@bidder = User.find(@ bid.user_id))
bids_controller.rb:
class BidsController < ApplicationController
# Create new bid
def create
# find Auction related to new Bid
@auction = Auction.find(params[:auction_id])
@bid = @auction.bids.create(bid_params)
@bid.user_id = current_user.id
# Find the bidder within User Table
@bidder = User.find(@bid.user_id)
@bid.save
redirect_to auction_path(@auction), :notice => "Bid placed"
end
出价部分视图:views \ bid \ _bid.html.erb
<p>
<strong>Bidder:</strong>
<%= @bidder.name %>
</p>
<p>
<strong>Bid-Amount:</strong>
<%= bid.amount %>
</p>
<p>
<%= link_to 'Destroy Bid', [bid.auction, bid],
method: :delete,
data: { confirm: 'Are you sure?' } %>
</p>
整件事显示在拍卖展示视图中:
视图\拍卖\ show.html.erb
<h2>Bids</h2>
<%= render @auction.bids %>
<h2>Place a Bid:</h2>
<%= render 'bids/form' %>
<h2>Comments</h2>
<%= render @auction.comments %>
<h2>Add a comment:</h2>
<%= render 'comments/form' %>
错误:
拍卖中的NoMethodError#show Showing C:/Users/santa/Documents/rails/app/views/bids/_bid.html.erb 第3行提出的地方:
未定义的方法`name&#39; for nil:NilClass提取源(行
3):1 2 3 4 5 6
<p> <strong>Bidder:</strong> <%= @bidder.name %> </p> <p>
模板包含跟踪:app / views / auctions / show.html.erb
名称存在于Users表
中答案 0 :(得分:2)
而不是<%= @bidder.name %>
尝试添加<%= bid.user.name %>
。如果在user_id
表格中bid
正确保存,那么显然会有has_many
和belongs_to
关联。
只需将<%= @bidder.name %>
替换为<%= bid.user.name %>