gpt4 book ai didi

ruby-on-rails - Rails : How to Convert has_one to has_many association

转载 作者:行者123 更新时间:2023-12-04 06:15:25 33 4
gpt4 key购买 nike

假设

class Kid < ActiveRecord::Base
has_one :friend
end

class Friend< ActiveRecord::Base
belongs_to :kid
end

我该如何将其更改为
class Kid < ActiveRecord::Base
has_many :friends
end

class Friend< ActiveRecord::Base
belongs_to :kid
end

会欣赏你的洞察力...

最佳答案

收藏

最重要的是,如果您将关联更改为 has_many :x 关系,它会创建关联数据的集合;而不是单个关联的单个对象

这里的区别与其实现无关,但对您如何在整个应用程序中使用关联有很多影响。我会解释两者

修复

首先,您是正确的,您可以将 has_one :friend 更改为 has_many :friends 。您需要小心理解为什么会这样:

ActiveRecord 关联通过关联数据表中称为 foreign_keys 的东西来工作。这些是对父类的 "primary key" (ID) 的列引用,允许 Rails/ActiveRecord 关联它们

只要您为所有 foreign_key 对象维护 Friend s,您就会使系统正常工作。

——

数据

要扩展这个想法,您必须记住,当您创建 has_many 关联时,Rails/ActiveRecord 将在您每次引用关联时拉取许多记录。

这意味着如果您调用 @kind.friends ,您将不再收到单个对象。您将从数据表中接收所有对象 - 这意味着您必须调用 .each 循环来操作/显示它们:

@kid = Kid.find 1
@kid.friends.each do |friend|
friend.name
end

如果执行此更改后,您在 save 上调用 order.save 方法时遇到问题,告诉您它已经存在,并且它不允许您实际上为一个 order 拥有许多 customer 记录,您可能需要调用 orders.save(:validate=> false )

关于ruby-on-rails - Rails : How to Convert has_one to has_many association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277864/

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