А как насчет ситуации, когда в каком-то журнале или книге напечатаны 5 стихов одного поэта?
Помните, если у вас есть поэт, у которого много стихов, и у вас есть много стихотворений, вывсегда можно получить поэта.
Poet.poems.first.printings вернет все печатные издания первого стихотворения поэтов
, или вы можете сделать Printing.poems.first.poet Таким образом, вы могли быполучить поэта первого стихотворения в печати.
Как бы вы установили эти отношения?В частности, как будет выглядеть модель и таблица базы данных И как вы будете использовать их для доступа к связанным данным?
Я бы настроил это следующим образом
Poet :has_many poems
poem :belongs_to poet
poem :has_and_belongs_to_many printings
printing :has_many poems
Поскольку выиспользуя ассоциацию has_and_belogs_to_many, вам нужна таблица объединения, для стихов и печатных изданий
у вас будет миграция, которая выглядит следующим образом
CreatePoemsPrintingJoinTable < ActiveRecord::Migration
def self.up
create_table :poems_printings, :id => false do |t|
t.integer :poem_id
t.integer :printing_id
end
end
def self.down
drop_table :poems_printings
end
end
Другие таблицы довольно просты
CreateTablePoems < ActiveRecord::Migration
def self.up
create_table :poems, do |t|
t.integer :poet_id
end
end
def self.down
drop_table :poems
end
end
CreateTablePoets < ActiveRecord::Migration
def self.up
create_table :poets do |t|
end
end
def self.down
drop_table :poems
end
end
CreateTablePrintings < ActiveRecord::Migration
def self.up
create_table :printings do |t|
end
end
def self.down
drop_table :printings
end
end