关联语法ruby on rails plural

时间:2012-07-22 06:52:31

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我是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是一个填充的Media对象数组):

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

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

uninitialized constant Product::Medium

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

就像我说我是Rails的新手所以如果有人能指出我正确的方向在Product&amp;媒体,那会很棒吗?

1 个答案:

答案 0 :(得分:5)

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

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”。