Ruby on rails 如何更改rails中的关联

Ruby on rails 如何更改rails中的关联,ruby-on-rails,Ruby On Rails,我想知道,如果我在两个模型之间建立了关联,然后发现我应该改变它,那么我应该怎么做?例如,如果有一个has\u one,它属于两个模型之间的关联,然后我发现它应该是has\u many,我该怎么办?除了在模型文件中更改这些术语之外,我是否应该创建一个新的迁移?如果是这样,我应该在迁移文件中写什么?我还应该在哪里进行更改 提前谢谢。如果您想从有一个更改为有多个,那么我认为您需要做的就是将关联更改为有多个,但是如果您想将属于,请,此时,您需要回滚该特定迁移,并根据新关联创建一个新的迁移数据文件实际上不

我想知道,如果我在两个模型之间建立了关联,然后发现我应该改变它,那么我应该怎么做?例如,如果有一个has\u one,它属于两个模型之间的关联,然后我发现它应该是has\u many,我该怎么办?除了在模型文件中更改这些术语之外,我是否应该创建一个新的迁移?如果是这样,我应该在迁移文件中写什么?我还应该在哪里进行更改


提前谢谢。

如果您想从
有一个
更改为
有多个
,那么我认为您需要做的就是将关联更改为
有多个
,但是如果您想将
属于
,请,此时,您需要回滚该特定迁移,并根据新关联创建一个新的迁移

数据文件实际上不需要更改。。。在
has\u one(单数)
目标模型中已经有一个外键,因此您可以在模型定义中将其更改为
has\u many(复数)

如果引用关联,例如
book.owner
,则必须使用复数术语
book.owner
,并且响应将是一个对象数组,而不是单个对象


您现有的所有关系都将自动更改。。。如果一本书有一个所有者,那么一本书仍然有一个所有者,但它将在一个数组中,您现在可以添加更多所有者。

例如,如果您有:

class Foo
 has_many :bars #or has_one :bar
end
另一类:

class Bar
 belongs_to :foo
end
在数据库中,需要在bars表中添加列
foo\u id
,但不需要在foos表中添加列
bar\u id
。所以,如果您决定转置关系,只需要在foos表中添加该列

我建议您在运行迁移之前先计划好

有点像:

    1) Foo
         - post:string
         - somethingelse:integer

         has_many :bars or has_one :bar

    2) Bar
         - something:boolean
         - else:string
         - foo_id:integer

         belongs_to :foo

现在您知道了创建模型时要运行什么,您可以立即运行迁移。

感谢您的回复。当然,提前计划是最好的办法。但是如果我需要更改其他人编写的代码,我想知道是否需要回滚?或者创建一个新的迁移?我只需要添加完成工作所需的列,因此您需要新的迁移。然后,我假设要删除一些关联,我还需要生成新的迁移,并在其中删除列。是吗?是的,您可以删除不需要的列