2010-04-30 91 views
1

紅寶石:1.9.2
的Rails:3.0beta3幫助協會在Rails 3的

我需要一些幫助,協會的Rails 3

我有以下型號(見下面摘錄):

學校,國家,SchoolLocale

的學校表有以下字段:

ID,姓名,STATE_ID,school_locale_id

States表具有以下字段:

ID,簡稱,名稱

的school_locales表具有以下字段:

ID,代碼,名稱

不幸的是,我的數據源沒有school_locales的ID。因此,學校表中'school_locale_id'字段中存儲的數據實際上映射到school_locales表中的'code'字段。

school.rb:

class School < ActiveRecord::Base 
    belongs_to :state 
    belongs_to :school_locale 
end 

state.rb:

class State < ActiveRecord::Base 
    has_many :schools 
end 

school_locale.rb:

class SchoolLocale < ActiveRecord::Base 
    has_many :schools 
end 

我想對於一個給定的學校查詢,比方說學校.find(1),這將輸出學校名稱,州名和學校場所名稱。我假設我需要在school_locales表中的'code'字段中添加一個索引,並以某種方式將其指定爲外鍵,但我不確定。任何幫助,將不勝感激。

回答

0

這並不完全回答你的問題,但我認爲這是一個有用的信息。關於您使用states表,請參閱Surrogate Vs. Natural/Business Keys

@Ted說,在這裏:

記得有什麼特別的一個主鍵,不同之處在於它被打成這樣。它不過是一個NOT NULL UNIQUE約束,並且一個表可以有多個約束。

如果您使用代理鍵,您仍然需要一個業務鍵以確保根據業務規則的唯一性。

state_id外鍵鏈接到states表沒有意義。每個州都有一個唯一的ID;其2個字母的縮寫。這個唯一的ID和數字一樣好。而且由於這些數據不會經常變化,所以在應用程序的某處靜態定義它並沒有什麼壞處。

+0

一旦我得到的解決方案,我將制定出如何不需要狀態表上的ID。 – GreenPlastik 2010-04-30 18:40:02

0

我真的不知道這件事,但你可以嘗試使用這樣的:

class SchoolLocale < ActiveRecord::Base 
    has_many :schools, :primary_key => :code 
end 

讓我知道,如果它的工作原理:]

+0

不幸的是,這是不行的。 – GreenPlastik 2010-04-30 18:42:51

+0

使用此代碼和'School.find(1).school_locale'時會得到什麼? – 2010-04-30 22:34:22