Tabela de trilhos Heritance de mesa única com acessórios HABTM em testes de unidade Nomethoderror: Método indefinido `Singularize '
Pergunta
Imagine uma estrutura de modelo da seguinte maneira:
modelos/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
modelos/promoção.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
e mesas da seguinte forma:
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
Então eu tenho acessórios da seguinte maneira:
#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
Quando eu executo meu teste de unidade, ele retorna esta mensagem de erro:
1) Error:
test_the_truth(CartTest):
NoMethodError: undefined method `singularize' for :promotions_products:Symbol
Por favor, deixe -me saber se você tiver experiência semelhante ou saber como consertar isso, ou pelo menos o que você pensou estar errado, estou pronto para experimentar qualquer coisa!
Muito obrigado, por favor, não hesite em responder ... realmente desesperado aqui!
Solução
A resposta é ... você não pode!
Infelizmente, mas às vezes os trilhos simplesmente não o correm. Nessas situações, apenas crie outro acessório para tabelas de associação.
Por exemplo, neste caso, promoções_products.yml e dentro dele você entra:
pp1:
promotion_id: <%= Fixtures.identify(:cross_sell_1) %>
product_id: <%= Fixtures.identify(:plumeboom_1) %>
Consegui usar conexões HABTM em acessórios, mas quando eles também estão tendo Rails de STI (herança de tabela única) parece ter problemas com ela.