2

我是 Ruby 的新手,只是使用这个论坛来帮助理解该语言,同时我编写一个示例应用程序来磨练我的技能。

我试图在产品和媒体之间建立一个多方面的关系。我怀疑我遇到的挑战是因为复数形式的媒介,但不知道如何解决它。

class CreateMedia < ActiveRecord::Migration
  def change
    create_table :media do |t|
      t.string :type
      t.string :alt
      t.boolean :is_primary
      t.string :url_tiny
      t.string :url_small
      t.string :url_regular
      t.string :url_large
      t.string :title

      t.timestamps
    end
  end
end

 class Media < ActiveRecord::Base
  attr_accessible :alt, :is_primary, :title, :type, :url_large, :url_regular, :url_small, :url_tiny
  belongs_to :product
end

class Product < ActiveRecord::Base
   attr_accessible :assoc_product,:product_id, :merch_associations, :aux_description, :buyable, :long_description, :name, :on_special, :part_number, :release_date, :short_description, :withdraw_date, :occasion
  has_and_belongs_to_many :categories
  has_many :merch_associations
  has_many :assoc_products, :through => :merch_associations
  has_many :media
 ...

当我运行它时(注意dress_media 是一个填充的媒体对象数组):

 products[i].media << dress_media[m]

我在错误控制台中得到了这个:

uninitialized constant Product::Medium

我查看了数据库,该表确实称为媒体,而不是媒体。所以我认为它应该是复数吧?(此代码是从 rails 生成器生成的)

就像我说我是 Rails 的新手,所以如果有人能指出我在产品和媒体之间创建一对多的正确方向,那会很棒吗?

4

1 回答 1

6

据我了解,您有一个名为“媒体”的模型。请注意,正如您在问题中提到的,“媒体”已经是复数形式。正确的是有一个名为“中”的模型和以下关系:

class Medium < ActiveRecord::Base
    attr_accessible :alt, :is_primary, :title, :type, :url_large, :url_regular,:url_small, :url_tiny
    belongs_to :product
end

class Product < ActiveRecord::Base
   attr_accessible :assoc_product,:product_id, :merch_associations, :aux_description,     :buyable, :long_description, :name, :on_special, :part_number, :release_date,     :short_description, :withdraw_date, :occasion
   has_and_belongs_to_many :categories
   has_many :merch_associations
   has_many :assoc_products, :through => :merch_associations
   has_many :media
   ...
end

有时您可能想要设置或覆盖 Rails 的单数化和复数化。我不建议在这种特定情况下这样做,但看看http://blog.thefrontiergroup.com.au/2011/06/pluralizations-and-singularizations-inflections-in-rails-3/就知道了怎么做。

请注意,如果您创建一个名为“Medium”的模型,则数据库表将称为“Media”。

于 2012-07-22T07:20:15.357 回答