【发布时间】:2011-10-15 15:28:54
【问题描述】:
我在模型 Brand 上定义了一个 :belongs_to 关联,如下所示:
belongs_to :loyalty_coupon, :class_name => Coupon, :foreign_key => :loyalty_coupon_id
(从 Brand 到 Coupon 也有 :has_many 关系,但 :belongs_to 关系旨在挑出一个特定的优惠券以引起特别注意。两个关联之间的关系名称和链接字段不同,因此应该没有冲突;我只提到这一点,因为它可以证明是相关的。关系表示为has_many :coupons 和belongs_to :brand。)
当我显示Brand.first.loyalty_coupon 时,我得到“nil”(没关系,因为我还没有分配一个)。当我尝试使用命令Brand.first.loyalty_coupon = Coupon.first 分配一个忠诚优惠券时,我收到错误消息:
undefined method `match' for #<Class:0x104036d30>
部分回溯如下:
activerecord (3.0.1) lib/active_record/base.rb:1016:in `method_missing'
activerecord (3.0.1) lib/active_record/base.rb:1180:in `compute_type'
activerecord (3.0.1) lib/active_record/reflection.rb:162:in `send'
activerecord (3.0.1) lib/active_record/reflection.rb:162:in `klass'
activerecord (3.0.1) lib/active_record/reflection.rb:173:in `build_association'
如果我执行Brand.first.build_loyalty_coupon,则会出现相同的错误消息(这并不奇怪,因为它正在做同样的事情)。我在 Coupon 模型中没有 :has_one,但我也尝试了指定 :class_name 和 :foreign_key,当我尝试 Coupon.first.brand_loyalty 时得到了相同的错误和回溯。我想我错过了一些愚蠢的东西,但我看不到它是什么。
【问题讨论】:
-
has_one :loyalty_coupon 等关系的两边都需要 foreign_key 和类名...试试看
-
@jamesw:正确。不幸的是,这并不能解决问题。
标签: ruby-on-rails associations belongs-to