我有两个模型,Story
和Chapter
。一个故事has_many
章节,其中一个是作为其第一章的章节。我曾经在 stories 表中有一个外键start_id
来指示哪一章是第一章。然而,数据库模式不得不稍微改变一下,现在每章都有一个code
. 如果代码是'1a'
,那么这是拥有该章节的故事的第一章。
以下似乎有效,包括#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和关联进行授权)。
我的方法是否有任何我目前没有意识到的缺点,或者我对它相对安全?