我試圖更新現有的多對多記錄時遇到困難。更新多對多記錄的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