我正在构建一个具有跨页和页面的页面布局应用程序。每个跨页包含两页(左页和右页)。
数据库如下所示:
create_table :spreads do |t|
...
t.references :left_page
t.references :right_page
...
end
create_table :pages do |t|
# No foreign keys
end
从语义上讲,两个页面属于一个跨页,因此按如下方式设置模型是有意义的:
class Spread < ActiveRecord::Base
has_one :left_page, :class_name => 'Page'
has_one :right_page, :class_name => 'Page'
end
class Page < ActiveRecord::Base
belongs_to :spread
end
但是,由于外键存在于 spreads 表中,Rails 似乎要求相反:
class Spread < ActiveRecord::Base
belongs_to :left_page, :class_name => 'Page'
belongs_to :right_page, :class_name => 'Page'
end
class Page < ActiveRecord::Base
has_one :spread
end
每当我在 Rails 中遇到这样的事情时,我都会认为我以错误的方式处理问题。是这种情况还是我只是生活在阅读不太清楚的代码中?