假设
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
非常感谢您的见解......
答案 0 :(得分:7)
<强>集合强>
最重要的是,如果您将关联更改为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 =&gt; false)
答案 1 :(得分:3)
你已经回答了这个问题。如你所示,只需在模型中更改它。