Помощь с ассоциациями в Rails 3 - PullRequest
1 голос
/ 30 апреля 2010

Рубин: 1.9.2
Рельсы: 3.0бета3

Мне нужна помощь с ассоциациями в Rails 3.

У меня есть следующие модели (см. Выдержки ниже):

Школа, штат, SchoolLocale

Таблица школ имеет следующие поля:

id, name, state_id, school_locale_id

Таблица состояний имеет следующие поля:

id, abbr, name

Таблица school_locales имеет следующие поля:

идентификатор, код, имя

К сожалению, у моего источника данных не было идентификаторов для school_locales. Таким образом, данные, хранящиеся в поле «school_locale_id» в таблице «школы», фактически отображаются в поле «код» в таблице «school_locales».

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), который бы выводил название школы, название штата и название локали школы. Я предполагаю, что мне нужно добавить индекс в поле 'code' в таблице school_locales и каким-то образом указать его как внешний ключ, но я не уверен. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2010

Я не совсем уверен в этом, но вы можете попробовать использовать это:

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

Дайте мне знать, если это работает:]

0 голосов
/ 30 апреля 2010

Это не совсем отвечает на ваш вопрос, но я думаю, что это полезная информация. Что касается использования таблицы states, позвольте мне сослаться на Суррогатное против. Natural / Business Keys .

@ Тед говорит здесь:

Помните, что в первичном ключе нет ничего особенного, кроме того, что он помечен как таковой. Это не более, чем ограничение NOT NULL UNIQUE, и таблица может иметь более одного.

Если вы используете суррогатный ключ, вы все равно хотите, чтобы бизнес-ключ гарантировал уникальность в соответствии с бизнес-правилами.

Нет смысла иметь внешний ключ state_id, который ссылается на таблицу states. У каждого государства уже есть уникальный идентификатор; его двухбуквенное сокращение. Этот уникальный идентификатор так же хорош, как и числовой. И поскольку эти данные не часто меняются, нет никакого вреда, если они статически определены в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...