【发布时间】:2011-12-10 19:35:35
【问题描述】:
我有两个模型,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 与关联授权)。
我的方法是否有任何我目前没有意识到的缺点,或者我对它相对安全?
【问题讨论】:
标签: ruby activerecord cancan has-many has-one