我是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;媒体,那会很棒吗?
答案 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”。