1

Team에는 Users에서 Members (조인 테이블)이 많은 데이터 모델이 있습니다. 내 Member 모델에는 admin 부울 열이 있습니다. 사용자가 새 팀을 만들면 (가입시) User에서 true까지 admin 필드를 설정하려고합니다. 이 작업을 수행하는 가장 좋은 방법이 무엇인지 확신 할 수 없습니다.레일 4 - 만들기 작업에서 조인 테이블의 조건부 기본값을 설정하십시오.

# Team.rb (model for team) 

[...] 

after_save :set_admin 

private 

    def set_admin 

     self.members.first.admin = true 

    end 

이것은 전무 포인터 오류 (self.members.first == nil) 결과 : 나는 다음과 같은 노력했다.

그래서 내가 원하는 것을 수행하는 올바른 레일스 방법은 무엇입니까? (사용자가 생성되면 새로운 팀은 사용자뿐만 아니라 팀의 관리자를 확인하십시오.)

업데이트

내 모델 협회은 다음과 같습니다

# Team.rb 
has_many :members 
has_many :users, through: :members 

# Member.rb 
belongs_to :user 
belongs_to :team 

# User.rb 
has_many :members 
has_many :teams, through: :members 
+0

회원 및 사용자 모델 코드를 붙여 넣으십시오. – sp1rs

+0

관련 모델 코드 (내 연관)를 추가했습니다. – Anders

답변

1

대신 사용 after_add

has_many :members, after_add: Proc.new { |u, m| m.first.admin = true; m.save } 
+0

그것이 효과가 있다고 생각했습니다. 어떤 오류도 없었습니다. 하지만 나중에이 값을 확인하려고 할 때 관리자 값이이 솔루션으로 설정되지 않은 것 같습니다. – Anders

+0

@AndersPlanting, 대신에 'proc'을 사용하는 대답을 업데이트했습니다. – bjhaid

+0

proc을 사용하여 동일한 결과를 얻는 것처럼 보이지만 값이 설정되지 않습니다. – Anders