遷移並不知道您打算如何使用其中定義的表。所有這些信息都在模型中進行。
總之遷移是罰款,你所描述會做什麼。但是你需要充實模型來定義你想要的關聯。
class Comic < ActiveRecord::Base
belongs_to :writer, :class_name => "Person"
belongs_to :artist, :class_name => "Person"
end
這允許您從漫畫中引用作者和藝術家。但是,您可能會想要對該協會進行回報,以便您可以根據其在生產中的角色輕鬆獲取漫畫。
class Person < ActiveRecord::Base
has_many :comics_as_writer, :class_name => "Comic", :foreign_key => :writer_id
has_many :comics_as_artist, :class_name => "Comic", :foreign_key => :artist_id
# some times you don't care what a person did for a comic,
# you just want to know what they worked on.
has_many :comics, :finder_sql => "SELECT comics.* FROM comics, people WHERE " +
"`comics`.`writer_id` = `people`.`id` OR " +
" `comics`.`artist_id` = `people`.`id`"
end
隨着定義了以下這些關係是可能的:
@comic.artist # => Person with id matching comics.artist_id
@comic.writer # => Person with id matching comics.writer_id
@person.comics_as_writer # => Array of comics where @person.id matches comics.writer_id
@person.comics_as_artist # => Array of comics where @person.id matches comics.artist_id
@person.comics # => Array of comics where @person.id matches comics.writer_id or comics.artist_id
謝謝。這是不是說我的mySQL永遠不會獲得外鍵的知識? – Stickboy 2010-01-18 22:16:09
您可以在遷移中添加外鍵約束。我創建了一個遷移助手在SQL Server中要做到這一點,你應該能夠做同樣的事情爲MySQL或使用插件像這樣的:http://agilewebdevelopment.com/plugins/foreign_key_migrations – MattMcKnight 2010-01-19 13:49:33
@MattMcKnight嘿馬特,剛出來的好奇心是你開源還是依靠你的移民幫手?我爲MySQL創建了類似的幫助器,並希望將它放在那裏供其他人使用。 – 2014-04-30 14:20:04