【问题标题】:Rails Single Table Inheritance with HABTM Fixture in unit testing returning NoMethodError: undefined method `singularize'Rails Single Table Inheritance with HABTM Fixture in unit testing return NoMethodError: undefined method `singularize'
【发布时间】:2010-03-03 09:08:21
【问题描述】:

想象一个模型结构如下:

models/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

models/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

如果您碰巧有类似的经历或知道如何解决此问题,或者至少只是您认为可能有问题的地方,请告诉我,我已准备好尝试任何方法!

非常感谢,请不要犹豫回复...这里真的很绝望!

【问题讨论】:

    标签: ruby-on-rails unit-testing fixtures has-and-belongs-to-many single-table-inheritance


    【解决方案1】:

    答案是……你不能!

    很遗憾,但有时 Rails 无法解决问题。在这些情况下,只需为关联表创建另一个 Fixture。

    例如在本例中,promotions_products.yml 并在其中输入:

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

    我设法在夹具中使用了 HABTM 连接,但是当它们也具有 STI(单表继承)时,rails 似乎有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      相关资源
      最近更新 更多