2011-02-14 3 views
2


I가 다음과 같은 모델레일 3 : 다 대다 상태에 관계

class Project < ActiveRecord::Base 
    has_many :project_members 
    has_many :members, :through => :project_members, :uniq => true,:class_name => "User", :source => :user 
    has_many :admins, :through => :project_members, :uniq => true, :conditions => ['project_members.admin = ?', true], :class_name => "User", :source => :user 

end 

class User < ActiveRecord::Base 
    # References 
    has_many :project_members 
    has_many :projects, :through => :project_members 

end 

과 조인 테이블

class ProjectMember < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
end 

내가 원하는 때 관계는 제대로 작동하지만, 이 새로운 저장 (u는 사용자입니다)이 코드

project.admins.push(u) 
project.save 

를 통해 프로젝트 관리자를 추가 관계를 설정하지만 조인 테이블에서 admin을 true로 설정하지 마십시오.

내가 수동으로

project.project_members.first.admin = true 

을하고는 테이블의 속성을 업데이트 넣은 사람은 아니다 프로젝트를 저장하여 true로이 프로젝트의 관계와 설정 관리자를 검색 할 경우에도 마찬가지입니다.

내가 뭘 잘못하고 있니? (나는 루비와 레일을 가지고있는 초심자 다.)
나는 지난 시간 동안 해결책을 찾기 위해 인터넷 검색을 해왔지만 아무것도 찾을 수 없었다 :/

+0

레일스에서 ​​너무 많은 마법을 기대하지 마십시오. "프로젝트 저장시 테이블의 속성을 업데이트하지 않습니다": 저장은 캐스케이드하지 않습니다 (생성시에만 수행). –

답변

2

관리자와의 연결 :

has_many :admins, :through => :project_members, :uniq => true, :conditions => {:project_members => {:admin => true}}, :class_name => "User", :source => :user 

나는 당신을 도울 것입니다.

+0

이미 시도했지만 관리자 특성이 사용자 테이블이 아니라 통과 테이블에 있으므로 다음 오류로 실패합니다. 'SQLite3 :: SQLException : 해당 열이 없습니다. users.admin : SELECT "users". * FROM "사용자"INNER JOIN "ON"사용자 ".id ="project_members ".user_id WHERE (" "project_members".project_id = 3) AND (("사용자". "admin"= 't'))) 제한 1 ' – Hameno

+0

그 사용에 대해 미안하다 : conditions => {: project_members => {: admin => true}} – jrichardlai

+0

고마워, 그건 내 버전과 비슷하지만 여전히'do . 관리자 "사용자". 아니면 자동으로 작동하지 않을까요? 이와 같이 관리자를 추가 할 수 있으려면 어떻게해야합니까? 그러면 admin 속성이 자동으로 true로 설정됩니까? – Hameno