У меня есть ассоциация: own_to, определенная для модели Brand следующим образом:
belongs_to :loyalty_coupon, :class_name => Coupon, :foreign_key => :loyalty_coupon_id
(Существует также отношение: has_many от бренда к купону, но отношение: own_to предназначено для выделения одного конкретного купона, требующего особого внимания. Имена взаимосвязей и поля связи между двумя ассоциациями различаются, поэтому конфликтов быть не должно; I упомяните только это, поскольку это может оказаться актуальным. Отношения выражаются как has_many :coupons
и belongs_to :brand
.)
Когда я показываю Brand.first.loyalty_coupon
, я получаю «ноль» (это нормально, потому что я еще не назначил его). Когда я пытаюсь назначить loyalty_coupon с помощью команды 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
(неудивительно, поскольку он делает то же самое). У меня не было: has_one в модели Coupon, но я также пробовал это с указанием: class_name и: foreign_key, и получил ту же ошибку и трассировку, когда попробовал Coupon.first.brand_loyalty
. Я представляю, что упускаю какую-то глупость, но не вижу, что это такое.