Jac*_*R-G 2 ruby-on-rails associations belongs-to
我有一个:在品牌Brand上定义的belongs_to关联如下:
belongs_to :loyalty_coupon, :class_name => Coupon, :foreign_key => :loyalty_coupon_id
Run Code Online (Sandbox Code Playgroud)
(还有一个:从Brand到Coupon的has_many关系,但是:belongs_to关系是为了特别注意一个特定的优惠券.两个关联之间的关系名称和链接字段不同,所以不应该有冲突;我只提到它,因为它可能证明是相关的.这种关系表达为has_many :coupons和belongs_to :brand.)
当我显示时Brand.first.loyalty_coupon,我得到"nil"(这没关系,因为我尚未指定一个).当我尝试使用该命令分配loyalty_coupon时Brand.first.loyalty_coupon = Coupon.first,我收到错误消息:
undefined method `match' for #<Class:0x104036d30>
Run Code Online (Sandbox Code Playgroud)
部分追溯如下:
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'
Run Code Online (Sandbox Code Playgroud)
如果我这样做同样的错误信息Brand.first.build_loyalty_coupon(因为它做同样的事情,这并不奇怪).我在优惠券模型中没有:has_one,但我也尝试使用:class_name和:foreign_key指定,并在我尝试时得到相同的错误和回溯Coupon.first.brand_loyalty.我想我错过了一些愚蠢的东西,但我看不出它是什么.
Rya*_*igg 10
您的:class_name选项应该是String,而不是Class对象.这是因为ActiveRecord不会尝试加载"B类",它可能引用"A类",它将引用"B类"等等.
belongs_to :loyalty_coupon, :class_name => "Coupon"
Run Code Online (Sandbox Code Playgroud)
String对象具有match方法,而Class对象则没有.
您不需要包含该:foreign_key选项,因为它是从关联名称推断出来的.
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |