如何跟踪ActiveRecord中的常量行?

时间:2012-12-09 06:15:52

标签: ruby-on-rails ruby activerecord

我需要对一些数据进行预测,我是后端/数据库编程的新手,所以这可能非常明显,但我已经搜索过,找不到任何东西。

我有一个'empires'表。每个帝国都可以'civilization'以下之一:

- British
- French
- Dutch
- Ottoman
- Spanish

现在,empires表包含一个名为civilization的VARCHAR(255)类型的列,这是存储上述字符串之一的位置。

现在,后来我意识到它不是很可扩展而且不是一个好主意,所以我决定创建另一个名为civilization的表,其中包含2列,id和string,其中包含它的名称。

我现在的问题是,如何确保所有'British'帝国都指向civilization表格中的完全相同的行?

1 个答案:

答案 0 :(得分:0)

更新2 :1到多个关联

class Empire < ActiveRecord::Base
  attr_accessible :name
  belongs_to :civilization
end

class Civilization < ActiveRecord::Base
  attr_accessible :name
  has_many :empires
end

british = Civilization.new(:name => 'British')
british.empires.build(:name => 'Britian')
british.empires.build(:name => 'India')
british.save

india = Empire.where(:name => 'India')
britain = Empire.where(:name => 'Britain')

puts india.civilization == britain.civilization # => true
puts india.civilization.inspect                 # => <Civilization:0x04121231 @name="British">
puts india.civilization.empires.inspect         # => [ <Empire:0x0123443 @name="Britain">, <Empire:0x0124543 @name="India"> ]

您的civilization_id表格需要empires才能存储civilizations条记录中的ID。