2013-02-19 5 views
12

Люди,генерирующая модель с ассоциациями ActiveRecord

Я работаю над созданием приложения, в котором у меня есть два объекта в моем проблемном пространстве. Одно существо - «биолог», а другое - «эксперимент», теперь один биолог может иметь много экспериментов, и каждый эксперимент может иметь много биологов.

Я знаю, как для создания моделей и маршрутов с помощью генератора командной строки:

rails generate scaffold Biologist name:string expertise:string last_pub:text 

Что такое правильный способ добавить ассоциацию? Должно ли идти и обновлять код модели после генерации? Для меня непонятно, добавлю ли я почтовое поколение ассоциации «own_to», как это отражается в схеме БД без миграции или чего-то еще? В приведенном выше примере, если «эксперимент» относится к «биологу», тогда в таблице «биолог» будет внешний ключ, как это будет создано, если я добавлю ассоциации в поколение классов модели. Я довольно новичок в рельсах, поэтому извиняюсь, если это наивный вопрос.

ответ

2

Вы должны создать миграцию, чтобы добавить biologist_id столбец в experiments таблицы, а затем добавить belongs_to :biologist отношения в вашей experiments модели.

Подробнее here.

40

Я думаю, что вы ищете что-то вроде следующего:

rails g scaffold Biologist experiment:references 

Read this article Хосе Valim, где он показывает вам, как сделать выше, а также добавить индексы БД из командной строки:

+0

Зачем вам добавлять индексы db из командной строки вместо самой миграции? Базы данных для участников не будут проиндексированы, если вы оставите его вне миграции ... – Meltemi

+1

Попробуйте сами: «rails g scaffold» Название биолога: индекс электронной почты: uniq'. Вы увидите, что код, необходимый для создания индексов, автоматически добавляется в вашу миграцию. Это экономит немного ввода и означает, что вы можете просто запускать свои миграции и двигаться дальше. – stephenmurdoch

+0

ic ... Я, по ошибке, думал, что вы предлагаете внести изменения в схему непосредственно из командной строки. Виноват. – Meltemi

0

Я бы сгенерировал модель для каждого из них, а затем создал таблицу соединений, так как у вас есть много, чтобы иметь много отношений. Если вы правильно следуете правилам, рельсы должны понимать отношения, данные вашей таблице соединений.

В общем случае, если вам нужно изменить отношения активной записи, вы должны сделать это в модели, используя отношения has_many или has_and_belongs_to_many.

Смежные вопросы