gpt4 book ai didi

ruby - ActiveRecord has_one 和 has_many 关系相同 :foreign_key

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:42 25 4
gpt4 key购买 nike

我有两个模型,StoryChapter。一个故事有_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'}

这样,stories表的外键start_id就不需要了,#start仍然是一个关联,好处多多(我需要# start 作为一个关联,因为我使用 CanCan 与关联进行授权)。

我的方法是否有任何我目前没有意识到的缺点,或者我相对安全?

最佳答案

靠代码== '1a' 找第一章有点靠不住。我可能会在章节表中添加一个标志,例如“first_chapter”或表明它是否是第一章的是真还是假的东西。这样一章的 first_chapter-ness 将在代码字段更改后继续存在,但这有点挑剔。

此外,为了避免重复自己,您可以将 has_one :start 的声明更改为类似以下内容:

has_one :start, :through => :chapters, :conditions => { :code => '1a' }

关于ruby - ActiveRecord has_one 和 has_many 关系相同 :foreign_key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com