我正在尝试执行基本的belongs_to / has_many关联,但遇到问题。似乎声明类的外键列没有更新。这是我的模特:
#
# Table name: clients
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
#
class Client < ActiveRecord::Base
has_many :units
...
attr_accessible :name
end
#
# Table name: units
#
# id :integer not null, primary key
# client_id :integer
# name :string(255)
# created_at :datetime
# updated_at :datetime
#
class Unit < ActiveRecord::Base
belongs_to :client
...
attr_accessible :name
end
当我打开rails控制台时,我会执行以下操作:
#This works as it should
c1 = Client.create(:name => 'Urban Coding')
u1 = c1.units.create(:name => 'Birmingham Branch')
以上给出了正确的结果。我有一个客户和一个单位。该单元正确填充了client_id外键字段。
#This does not work.
c1 = Client.create(:name => 'Urban Coding')
u1 = Unit.create(:name => 'Birmingham Branch')
u1.client = c1
我觉得上面应该有同样的效果。然而,这种情况并非如此。我有一个单位和一个客户,但没有填充单位client_id列。不确定我在这里做错了什么。感谢帮助。如果您需要更多信息,请与我们联系。
答案 0 :(得分:3)
答案 1 :(得分:2)
是的,我想如果保存它,ID就会被设置。
第一种语法要好得多。如果您不想立即执行保存操作(创建适合您的操作),请使用build:
c1 = Client.create(:name => 'Urban Coding')
u1 = c1.units.build(:name => 'Birmingham Branch')
# do stuff with u1
u1.save
答案 2 :(得分:0)
这有效:
c1 = Client.create(:name => 'Urban Coding')
u1 = Unit.create(:name => 'Birmingham Branch')
u1.client_id = c1.id
u1.save
c1.save
但另一种方式是创建它的更好方法。