【发布时间】:2010-07-27 13:55:49
【问题描述】:
您将如何使用 ActiveRecord 映射虚线关联?是否有任何 ActiveRecord 方式?我想要的是获得特定商品的所有独特促销活动。
以下是我认为但我不太喜欢的事情:
使用自定义查找器
class Item < ActiveRecord::Base
has_many :promotions, :finder_sql => "SELECT..FROM promotions..purchase_option_id IN (...)"
end
肮脏、低效但红宝石般的方式
my_item.purchase_options.map(&:promotion).uniq
打破PurchaseOptionPromotion HABTM 关联并为Item创建一个新关联PromotedPurchaseOption
class Item < ActiveRecord::Base
has_many :promoted_purchase_options
has_many :promotions, :through => :promoted_purchase_options
end
其他想法
我认为使用命名范围或定义新的方法不是一个好主意 如果使用它们,这将不会简单地工作或执行低效的查询:
Item.first.promotions.count
Item.first.promotions.available
Promotion.first.items.all
【问题讨论】:
-
顺便问一下,有没有一种方法可以定义自定义查找器而不是编写普通的 SQL?
-
有 :select, :from 选项可以修改 AR 生成的默认 SQL
-
为什么您认为使用 named_scopes 不是一个好主意?绝对没问题,有很大帮助!
-
@j,因为调用
Item.promotions将返回Items的数组而不是Promotions -
@knoopx:在这种情况下,我相信使用返回
promotions的方法会比使用named_scope更好。但是 named_scopes 通常真的很有帮助!
标签: ruby-on-rails activerecord associations