我有两个模型,Story
和Chapter
。一个故事has_many
章节,其中一章是第一章。我曾经在故事表中有一个外键start_id
来指示哪个章节是第一个。 Hovewer,数据库模式必须稍微更改一下,现在每章都有一个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和协会进行授权。
我的方法是否有任何我目前未能意识到的缺点,或者我对它相对安全?
答案 0 :(得分:2)
依赖代码==' 1a'找到第一章有点不稳定。我可能会在章节表中添加一个标记,例如' first_chapter'或者是真或假的东西,表明它是否是第一章。这样一个章节的first_chapter-ness将在代码字段的更改后继续存在,但这有点挑剔。
另外,为了避免重复你自己,你可以改变has_one的声明:start to like like:
has_one :start, :through => :chapters, :conditions => { :code => '1a' }