Я застреваю при попытке обновить существующую запись многие ко многим.
Модель проекта:
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
так что, как видите, я пытаюсь обновить ассоциацию первого hw Майка до " homework1 ". Все домашние задания уже находятся в таблице заданий, поэтому просто найдите « homework1 » и назначьте его Майку. к сожалению, когда я набираю третью строку, ошибок нет, но она не обновляется. В памяти p.assignments == homework1
, но в БД все так же (даже после p.save). Таблица присоединения проекта вообще не изменяется.
журналы mysql показывают, что эта команда генерируется всякий раз, когда я вхожу в 3-ю строку.
SELECT "assignments".* FROM "assignments" WHERE "assignments"."name" = 'homework1' LIMIT 1
Обновлений нет нигде .... что я делаю не так?
UPDATE
Итак, я обнаружил, что могу просто ссылаться на таблицу соединений для редактирования ссылок. Что-то вроде:
proj = p.projects.first
proj.assignment_id = 12
proj.save!