私はStory
とChapter
という2つのモデルを持っています。ストーリーhas_many
の章のうちの1つは、その最初の章として機能する章です。どのチャプターが最初であるかを示すために、私は外来キーstart_id
をストーリーテーブルに持っていました。 Hovewerでは、データベーススキーマを少し変更しなければならなかったので、すべての章にcode
が追加されました。コードが'1a'
の場合、それは章を所有するストーリーの最初の章です。ActiveRecord has_oneとhas_manyの関係は同じです:foreign_key
次は#create_start
含めて、動作しているようです:
has_many :chapters, :dependent => :destroy, :inverse_of => :story
has_one :start, :class_name => 'Chapter', :foreign_key => 'story_id', :conditions => {:code => '1a'}
この方法で、物語のテーブルの外部キーstart_id
は不要で、かつ#start
はまだ協会のまま、すべての利点と(私はとして#start
を必要とします私はCanCanを承認のための関連付けに使用しているため、関連付け)。
私のアプローチには、現在実現していない欠点がありますか、それとも比較的安全ですか?
ああ、私は '知りませんでした:through'が参加したモデルのためだけでなく、使用することができ、サブセットも含まれます。それは間違いなくきれいです。 –
...私は開発データベースを再作成した後、CanCanが突然動作を停止したことを除いて。私がより冗長な関係に戻ってしまうと、もう一度うまくいく。どのように奇妙です。 –