我试图更新现有的多对多记录时遇到困难。更新多对多记录的Rails
项目模型:
class Project < ActiveRecord::Base
belongs_to :assignment
belongs_to :programmer
end
编程模型:
class Programmer < ActiveRecord::Base
has_many :projects
has_many :assignments, :through => :projects
end
分配模式:
class Assignment < ActiveRecord::Base
has_many :projects
has_many :programmers, :through => :projects
end
,所以我联系了起来,像这样的数据:
p = Programmer.create(:name => "Mike")
p.assignments.create(:name => "homework4")
p.assignments[0] = Assignment.find_or_create_by_name("homework1")
p.save
因此,您可以看到,我正在尝试将Mike的第一个hw的关联更新为“homework1”。所有的家庭作业已经在作业表中,所以它只需找到“作业1”并将其分配给麦克风。不幸的是,当我输入第三行时,没有错误,但它不会更新它。在内存中,p.assignments == homework1
,但在数据库中它仍然是相同的(即使在p.save之后)。项目的连接表完全没有改变。
mysql的日志显示每当我进入第三行时生成此命令。
SELECT "assignments".* FROM "assignments" WHERE "assignments"."name" = 'homework1' LIMIT 1
有没有更新任何地方....我做错了什么?
UPDATE
所以我发现我可能只是引用连接表,直接编辑链接。沿着线的东西:
proj = p.projects.first
proj.assignment_id = 12
proj.save!
令人惊讶的是,你不需要t.references来找到父母或孩子。我上面的设置允许我找到任何与程序员和与任务相关的程序员关联的任务。 – Mason 2011-03-06 23:52:43