2
我有兩個模型,Story
和Chapter
。一個故事has_many
章節,其中之一是作爲其第一章的章節。我曾經在故事表中使用外鍵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在重新創建我的開發數據庫後突然停止工作。如果我恢復到更加冗長的關聯,那麼這又很好。多麼奇怪。 –