使用 :belongs_to 关联时未定义的方法'Match'



我在模型Brand上定义了一个:belongs_to关联,如下所示:

belongs_to  :loyalty_coupon, :class_name => Coupon, :foreign_key => :loyalty_coupon_id
Brand和Coupon之间也有一个:has_many关系,但是:belongs_to关系的目的是挑出一个特别注意的特定优惠券。两个关联之间的关系名称和链接字段是不同的,因此不应该有冲突;我提到这件事只是因为它可能证明是相关的。关系表示为has_many :couponsbelongs_to :brand)

当我显示Brand.first.loyalty_coupon时,我得到"nil"(这没关系,因为我还没有分配一个)。当我尝试使用命令Brand.first.loyalty_coupon = Coupon.first分配loyalty_coupon时,我得到错误消息:

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时,得到了相同的错误和回溯。我想象我错过了一些愚蠢的东西,但我看不出它是什么。

您的:class_name选项应该是一个String对象,而不是一个class对象。这样ActiveRecord就不会试图加载可能引用"类A"的"类B",而"类A"又会引用"类B",以此类推。

belongs_to  :loyalty_coupon, :class_name => "Coupon"

String对象有match方法,而Class对象没有。

您不需要包含:foreign_key选项,因为它是从关联的名称推断出来的。

最新更新