【发布时间】:2012-02-03 15:56:45
【问题描述】:
我正在使用 Rails 实现一个在线应用商店。其数据模型如下:
class User < ActiveRecord::Base
has_many purchase_records
has_many items, :through => purchase_records
end
class Item < ActiveRecord::Base
has_many purchase_records
has_many users, :through => purchase_records
end
class PurchaseRecord < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
它有一个页面显示可用项目和价格,如果用户购买了该项目,价格将是一个下载链接,就像 App Store 一样。编写了一个视图助手来帮助生成此类链接:
def download_link(item)
# generate a download link
end
def item_link(item)
if current_user and current_user.items.where(:id => item.id).first != nil
# User already purchased it
download_link(item, 'book-price')
else
# Not purchased yet, show price and link to its details
link_to item.price, item
end
end
current_user 由设计定义。它工作得很好,除了它需要为一个包含 20 个项目的页面花费 20 个额外的数据库查询,因为它需要检查用户是否为每一个项目购买了该项目。我想知道是否可以对其进行优化,例如预加载当前用户购买的物品,但我不知道如何在视图助手中编写它。
【问题讨论】:
标签: ruby-on-rails database ruby-on-rails-3 activerecord