Ruby on rails 如何更改rails中的关联
我想知道,如果我在两个模型之间建立了关联,然后发现我应该改变它,那么我应该怎么做?例如,如果有一个has\u one,它属于两个模型之间的关联,然后我发现它应该是has\u many,我该怎么办?除了在模型文件中更改这些术语之外,我是否应该创建一个新的迁移?如果是这样,我应该在迁移文件中写什么?我还应该在哪里进行更改Ruby on rails 如何更改rails中的关联,ruby-on-rails,Ruby On Rails,我想知道,如果我在两个模型之间建立了关联,然后发现我应该改变它,那么我应该怎么做?例如,如果有一个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
现在您知道了创建模型时要运行什么,您可以立即运行迁移。感谢您的回复。当然,提前计划是最好的办法。但是如果我需要更改其他人编写的代码,我想知道是否需要回滚?或者创建一个新的迁移?我只需要添加完成工作所需的列,因此您需要新的迁移。然后,我假设要删除一些关联,我还需要生成新的迁移,并在其中删除列。是吗?是的,您可以删除不需要的列