Rails Single Table Inheritance с HABTM Fixture в модульном тестировании, возвращая NoMethodError: неопределенный метод `singularize ' - PullRequest
3 голосов
/ 03 марта 2010

Представьте себе модель структуры следующим образом:

Модели / cross_sell_promotion.rb

     class CrossSellPromotion < Promotion
       has_and_belongs_to_many :afflicted_products, :join_table => :promotion_afflicted_products, :foreign_key => 'promotion_id', :association_foreign_key => 'product_id', :class_name => 'Product'
       has_and_belongs_to_many :afflicted_categories, :join_table => :promotion_afflicted_categories, :foreign_key => 'promotion_id', :association_foreign_key => 'category_id', :class_name => 'Category'
       . . .
     end

Модели / promotion.rb

class Promotion < ActiveRecord::Base
  has_and_belongs_to_many :products, :join_table => :promotions_products
  has_and_belongs_to_many :categories, :join_table => :promotions_categories
  - - -
end

и следующие таблицы:

table promotions
type :string
...some other fields unrelated to this problem

table promotions_products
promotion_id :integer
product_id :integer

table promotion_afflicted_products
promotion_id :integer
product_id :integer

table promotion_afflicted_categories
promotion_id :integer
category_id :integer

Тогда у меня есть следующие приспособления:

#promotions.yml
cross_sell_1:
products: plumeboom_1, plumeboom_2
  value: 100
  value_type: percentage
  type: CrossSellPromotion

#products.yml
plumeboom_1:
  model: plumeboom1
  url: plumeboom-1

plumeboom_2:
  model: plumeboom2
  url: plumeboom-2

plumeboom_3:
  model: plumeboom3
  url: plumeboom-3

Когда я запускаю мой модульный тест, он возвращает это сообщение об ошибке:

1) Error:
test_the_truth(CartTest):
NoMethodError: undefined method `singularize' for :promotions_products:Symbol

Пожалуйста, дайте мне знать, если у вас есть подобный опыт или вы знаете, как это исправить, или хотя бы то, что вы считали неправильным, я готов попробовать что-нибудь!

Большое спасибо, пожалуйста, не стесняйтесь отвечать ... действительно отчаянно здесь!

1 Ответ

3 голосов
/ 04 марта 2010

Ответ ... Вы не можете!

К сожалению, но иногда Rails просто не может этого сделать. В этих ситуациях просто создайте другой прибор для таблиц ассоциации.

например. в этом случае promotions_products.yml и внутри него вы вводите:

pp1:
    promotion_id: <%= Fixtures.identify(:cross_sell_1) %>
    product_id: <%= Fixtures.identify(:plumeboom_1) %>

Мне удалось использовать соединения HABTM в приборах, но когда у них также есть рельсы STI (одиночное наследование таблиц), похоже, с этим проблемы.

...