1

Ruby:1.9.2
レール:3.0beta3

Rails3での関連付けについてサポートが必要です。

私は次のモデルを持っています(以下の抜粋を参照):

学校、州、SchoolLocale

学校のテーブルには次のフィールドがあります。

id、name、state_id、school_locale_id

状態テーブルには次のフィールドがあります。

id、abbr、name

school_localesテーブルには次のフィールドがあります。

ID、コード、名前

残念ながら、私のデータソースにはschool_localesのIDがありませんでした。したがって、schoolsテーブルの「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

特定の学校、たとえばSchool.find(1)のクエリが必要です。これにより、学校名、州名、および学校ロケール名が出力されます。school_localesテーブルの「code」フィールドにインデックスを追加し、それを外部キーとして指定する必要があると思いますが、よくわかりません。どんな助けでもいただければ幸いです。

4

2 に答える 2

0

これはあなたの質問に正確に答えるものではありませんが、それは有用な情報だと思います。テーブルの使用については、サロゲート対statesを参照してください。ナチュラル/ビジネスキー

@テッドはここに言います:

主キーにはそのようにラベルが付けられていることを除いて、特別なことは何もないことを忘れないでください。これはNOTNULLUNIQUE制約にすぎず、テーブルには複数の制約を含めることができます。

代理キーを使用する場合でも、ビジネスルールに従って一意性を確保するためのビジネスキーが必要です。

テーブルstate_idにリンクする外部キーを持っていても意味がありません。states各州にはすでに一意のIDがあります。その2文字の略語。この一意のIDは、数値のIDと同じくらい優れています。また、このデータは頻繁に変更されないため、アプリケーション内のどこかに静的に定義しても問題はありません。

于 2010-04-30T17:57:30.407 に答える
0

よくわかりませんが、これを使ってみてください:

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

それが機能するかどうか教えてください:]

于 2010-04-30T18:10:41.453 に答える