기존 레코드를 여러 레코드로 업데이트하려고 시도하고 있습니다.많은 레코드를 많은 레코드로 업데이트하는 레일
프로젝트 모델 :
class Project < ActiveRecord::Base
belongs_to :assignment
belongs_to :programmer
end
프로그래머 모델 :
class Programmer < ActiveRecord::Base
has_many :projects
has_many :assignments, :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
:
class Assignment < ActiveRecord::Base
has_many :projects
has_many :programmers, :through => :projects
end
그래서 지금처럼 연결된 데이터가
볼 수 있듯이 마이크의 첫 번째 연관성을 "homework1"으로 업데이트하려고합니다. 모든 숙제는 이미 과제 테이블에 있으므로 "homework1"을 찾아 마이크에 지정하십시오. 불행히도, 세 번째 줄을 입력 할 때 오류는 없지만 업데이트하지는 않습니다. 메모리에 p.assignments == homework1
이지만 DB에서는 여전히 동일합니다 (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!
놀랍게도 부모 나 자녀를 찾으려면 t.references가 필요하지 않습니다. 위의 셋업을 통해 프로그래머와 할당과 관련된 프로그래머와 관련된 모든 할당을 찾을 수 있습니다. – Mason