2014-10-09 2 views
1

의 내가 사회 보장 번호와 같은 기본 키 이외의 다른 키를 전달하여 연결을 업데이트 할 가정 해 봅시다 :업데이트 협회 기본 키

Teacher.find(params[:id]).update({'student_ids'=>['123-45-6789','987-65-4321']}) 

는 어떻게 교사 모델을 이해 할 수있다 그것은 데이터베이스 ID가 아닌 SSN을 수신 할 것입니까? SSN은 학생을 고유하게 식별합니다.

편집 : Pavling의 솔루션이 모델의 논리를 유지하면서 좋아합니다. 그러나이 실패

Teacher.new({name:'Miss Molly',student_ssns:['123-45-6789','987-65-4321']}) 

답변

1

SSN은 학생 행에 대한 고유 식별자 인 경우, 당신은 대신 기본 키 만들 수 컨벤션은 '기본'ID 필드를 그대로 두는 것이 좋습니다.

그럼 student_ids이 아닌 student_ssns이 걸리는 Teacher의 방법은 어떨까요?이 방법으로 학생 ID (Kevin Monk의 대답과 유사)를 찾으십니까?

# teacher.rb 
def student_ssns=(ssns) 
    student_ids = Student.where(ssn: ssns).pluck(:id) 
    update({student_ids: student_ids}) 
end 

그럼 당신은 이렇게 사용할 수 있습니다 :

Teacher.find(params[:id]).student_ssns(['123-45-6789','987.65.4321']) 
+0

I이 용액을 좋아하지만, 이것은 실패 Teacher.new ({이름 : 미스 몰리 'student_ssns을 : ['는 123-45-6789 ','987-65-4321 ']})와 ActiveRecord :: UnknownAttributeError : 알 수없는 속성 : student_ssns – Dave

+0

메소드 이름을 수정했습니다 ... 죄송합니다. '설정자'여야합니다. – Pavling

2

방법에 대한 ActiveRecord::UnknownAttributeError: unknown attribute: student_ssns으로 ...

student_ids = Student.where(ssn:['123-45-6789','987.65.4321']).map(&:id) 
Teacher.find(params[:id]).update({'student_ids'=> student_ids}) 
1

Pavling의 솔루션을 사용하여, 이에 정의 라인을 변경 : 당신을 위해 제대로 작동 가야

def student_ssns=(ssns) 

.