以这种情况为例。
你有三种型号:
诗人和诗歌是显而易见的:
has_many诗歌belongs_to诗人在处理印刷模式时,我会感到困惑。
在这种情况下,印刷,在某种意义上,属于诗人和诗歌。你可以说诗人has_many印刷或诗has_many印刷这是合理的,但走相反的路线是棘手的.
一本杂志或一本书刊登了一位诗人的五首诗,情况如何?或者,其中一首诗发表在10种不同的杂志上?
似乎印刷本身“属于许多”诗歌或诗人。我知道这是错误的,但我只是想阐明这一点。
因此,答案是:你将如何建立这些关系?具体来说,模型和数据库表是什么样的,您将如何使用它们访问相关的数据?
谢谢!
发布于 2011-08-07 01:18:40
,一本杂志或一本书印刷了一位诗人的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
endhttps://stackoverflow.com/questions/6970047
复制相似问题