【发布时间】:2021-04-02 19:14:23
【问题描述】:
我有一个允许用户对物品进行拍卖和出价的系统。我有这些模型
Item(ID,描述)
User(身份证,姓名)
Bid(id、item_id、user_id、价格)
Sale(id、item_id、seller_id、buyer_id)
class Item < ApplicationRecord
has_many :bids
end
class User < ApplicationRecord
has_many :bids
end
class Bid < ApplicationRecord
belongs_to :user
belongs_to :item
end
class Sale < ApplicationRecord
belongs_to :seller, foreign_key: seller_id, class_name: 'User'
belongs_to :buyer, foreign_key: :buyer_id, class_name: 'User
belongs_to :item
has_many :bids, through :item
end
我正在尝试制作一个页面,列出所有最近的销售,并为每笔销售列出最终买家的出价历史记录。
例如:
class SalesController < ApplicationRecord
def index
@sales = Sale.all.includes(:item, :bids)
end
end
index.html.erb:
<% @sales.each do |sale| %>
<%= sale.item.description %>
<p>previous bids</p>
<% sale.bids.select { |bid| bid.user_id == sale.buyer_id }.each do |bid| %>
<%= bid.price %>
<% end %>
<% end %>
这很好用,但我必须在控制器中预加载所有的出价。有没有办法只包含所需的子集?我觉得应该可以给Sale添加关联比如has_many :buyer_previous_bids, -> (??), class_name: 'Bid'可以预加载Sale.includes(:buyer_previous_bids)
【问题讨论】:
-
sale.bids 是如何工作的?您似乎没有任何关联将它们联系起来
-
好点。我已经更新了我的问题。我认为
bids应该是has_many :through :item关联
标签: ruby-on-rails ruby activerecord