スプレッドとページを持つページ レイアウト アプリケーションを構築しています。各見開きには 2 ページ (左ページと右ページ) が含まれます。
データベースは次のようになります。
create_table :spreads do |t|
...
t.references :left_page
t.references :right_page
...
end
create_table :pages do |t|
# No foreign keys
end
意味的には、2 つのページが見開きに属しているため、次のようにモデルを設定するのが理にかなっています。
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
しかし、外部キーはスプレッド テーブルに存在するため、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でこのようなことに出くわすたびに、問題へのアプローチが間違っていると思います。そうですか、それとも、はっきりと読めないコードを使っているだけですか?