3

Imaginer une structure de modèle comme suit:Rails unique héritage de table avec HABTM Fixture dans les tests unitaires NoMethodError retour: méthode non définie singularisent »

modèles/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 

modèles/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 

et tableaux comme suit:

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 

, j'ai un fixtures comme suit:

#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 

Quand je lance mon test unitaire, elle renvoie ce message d'erreur:

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

S'il vous plaît, laissez-moi savoir si vous arrive d'avoir une expérience similaire ou savoir comment résoudre ce problème, ou du moins ce que vous pensiez être faux, je suis prêt à essayer n'importe quoi!

Merci beaucoup, n'hésitez pas à répondre ... vraiment désespéré ici!

Répondre

3

La réponse est ... Vous ne pouvez pas!

Malheureusement, mais parfois Rails ne va pas le couper. Dans ces situations, créez simplement un autre Fixture pour les tables d'association.

E.g. dans ce cas promotions_products.yml et à l'intérieur vous entrez:

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

J'ai réussi à utiliser des connexions HABTM dans les luminaires, mais quand ils ont également des rails ITS (héritage de table unique) semble avoir des problèmes avec elle.