2014-04-14 3 views
0

을 사용 has_and_belong_to_many 엔티티를 추가내가 두 가지 모델이 정적 메서드

>current_candidate.skills.count 
=> 0 
>current_candidate.skills.add 
=> ... 
>current_candidate.skills.count 
=> 0 

스킬 management이 생성되었지만 bi가 아닙니다. 내 후보 엔티티에 제출 했어. 정적 메서드가 current_candidate을 고려하지 않는 이유를 모르겠습니다.

PS : 그것은 잘 작동 직접 바인딩 (has_many와 belongs_to 등)

+0

후보 엔터티는 무엇입니까? add 메소드에서 이것을 전달한 다음 add 메소드에서 find_or_create_by에 속성을 설정해야합니다. –

답변

0
(이전의 대답은 삭제)

새로운 대답 : 당신이 클래스의 방법으로 add을 정의하기 때문에

당신의 코드가 작동하지 않습니다 Skill입니다. 클래스Skill은 후보자와 아무런 관련이 없습니다. 인스턴스Skill 인 경우 후보와의 관계가 있습니다.

이 문제를 해결하려면 add_skill 메서드를 Candidate에 추가하고 Skill에있는 메서드를 제거하는 것이 더 바람직하다고 생각합니다.

class Candidate < ActiveRecord::Base 
    has_and_belongs_to_many :skills 

    def add_skill(skill_name) 
    skills.find_or_create_by(name: skill_name) 
    end 
end 

사용법 :

내 이전의 대답에 명시된 바와 같이
current_candidate.add_skill('a_skill') 

, 당신은 (검증) 오류를 포착하기 위해 빅뱅 버전 find_or_create_by!find_or_create_by 전화를 대체 할 수 있습니다.

+0

작동하지 않습니다.'candidates_skills' 테이블에 관계가 작성되지 않았습니다. –

+0

아, 나는 뭔가 중요한 것을 간과했다. 답변이 업데이트되었습니다. – zwippie

관련 문제