gpt4 book ai didi

ruby-on-rails - 使用 :belongs_to association 时未定义方法 'Match'

转载 作者:行者123 更新时间:2023-12-03 20:00:54 24 4
gpt4 key购买 nike

我在模型 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 选项应该是一个字符串,而不是一个类对象。这样 ActiveRecord 就不会尝试加载可能引用“A 类”而引用“B 类”的“B 类”等等。

belongs_to  :loyalty_coupon, :class_name => "Coupon"

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

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

关于ruby-on-rails - 使用 :belongs_to association 时未定义方法 'Match',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6868260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com