在以下情况下:
user has many bags
bag has many items
users
-id
bags
-id
-user_id
items
-id
-bag_id
有两种方法可以访问用户的项目。
1)可以给用户添加一个实例方法,遍历用户的每个包,并将包中的物品收集到一个数组中返回。在 Ruby on Rails 中,类似:
#in user.rb
def items
items = []
bags.includes(:items).each { |bag| items += bag.items }
end
2)user_id
直接在items表中添加一个属性,并添加一个额外的关系,这样user has many items
。然后就做user.items
。
第二种方法会更快,但涉及存储冗余数据。在某些情况下实施它是有意义的吗?