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在重新创建我的开发数据库后突然停止工作。如果我恢复到更加冗长的关联,那么这又很好。多么奇怪。 –