1

红宝石:1.9.2
轨道:3.0beta3

我需要一些有关 Rails 3 关联的帮助。

我有以下模型(见下面的摘录):

学校、州、SchoolLocale

学校表具有以下字段:

id、姓名、state_id、school_locale_id

状态表具有以下字段:

ID,缩写,名称

school_locales 表具有以下字段:

身份证、代码、姓名

不幸的是,我的数据源没有 school_locales 的 ID。因此,存储在schools 表中'school_locale_id' 字段中的数据实际上映射到school_locales 表中的'code' 字段中。

学校.rb:

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

状态.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 表中的“代码”字段中添加一个索引,并以某种方式将其指定为外键,但我不确定。任何帮助,将不胜感激。

4

2 回答 2

0

我不太确定,但你可以尝试使用这个:

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

让我知道它是否有效:]

于 2010-04-30T18:10:41.453 回答
0

这并不能完全回答您的问题,但我认为这是一个有用的信息。关于您使用states表格,让我参考Surrogate Vs。自然/业务密钥

@Ted 在这里说:

请记住,主键没有什么特别之处,只是它被标记为这样。它只不过是一个 NOT NULL UNIQUE 约束,一个表可以有多个。

如果您使用代理键,您仍然需要一个业务键来确保根据业务规则的唯一性。

state_id拥有链接到states表的外键是没有意义的。每个州都已经有一个唯一的 id;其 2 个字母的缩写。这个唯一的 id 和数字一样好。而且由于这些数据不会经常更改,因此在应用程序中的某个地方对其进行静态定义并没有什么坏处。

于 2010-04-30T17:57:30.407 回答