Ruby on rails Rails更新多对多记录

Ruby on rails Rails更新多对多记录,ruby-on-rails,many-to-many,save,Ruby On Rails,Many To Many,Save,我一直在尝试更新现有的多对多记录 项目模型: class Project < ActiveRecord::Base belongs_to :assignment belongs_to :programmer end 如您所见,我正在尝试将Mike的第一个hw关联更新为“家庭作业1”。所有的家庭作业都已在作业表中,所以它应该只找到“家庭作业1”并将其分配给mike。不幸的是,当我键入第三行时没有错误,但它不会更新它。在内存中,p.assignments==homework1

我一直在尝试更新现有的多对多记录

项目模型:

class Project < ActiveRecord::Base
    belongs_to :assignment
    belongs_to :programmer
end
如您所见,我正在尝试将Mike的第一个hw关联更新为“家庭作业1”。所有的家庭作业都已在作业表中,所以它应该只找到“家庭作业1”并将其分配给mike。不幸的是,当我键入第三行时没有错误,但它不会更新它。在内存中,
p.assignments==homework1
,但在数据库中仍然是相同的(即使在p.save之后)。项目的联接表根本没有更改

mysql的日志显示每当我进入第三行时都会生成这个命令

SELECT "assignments".* FROM "assignments" WHERE "assignments"."name" = 'homework1' LIMIT 1
任何地方都没有更新。。。。我做错了什么

更新

所以我发现我可以直接引用连接表来编辑链接。大致如下:

proj = p.projects.first

proj.assignment_id = 12
proj.save!

如果您只想引用对象,则需要编辑迁移脚本(db/migrate)。例如:

def self.up
  create_table :configurations do |t|
    t.string :name
    t.references :project  # This store just the id of the object.
    t.timestamps
  end
end
别忘了键入:

rake db:migrate

令人惊讶的是,您不需要t.references来查找父级或子级。我上面的设置允许我查找与程序员关联的任何任务以及与任务关联的任何程序员。
proj = p.projects.first

proj.assignment_id = 12
proj.save!
def self.up
  create_table :configurations do |t|
    t.string :name
    t.references :project  # This store just the id of the object.
    t.timestamps
  end
end
rake db:migrate