나는 이것에 대해 잘못된 방향으로 가고 있을지 모르지만, 연관과 범위에 대한 다양한 SO 기사와 Rails 문서를 읽은 후, 나는 그다지 현명하지 않다.
다음과 같이 표현되는 다 대일 관계가 있습니다.
class User < ActiveRecord::Base
has_many :user_program_records
has_many :programs, through: :user_program_records
end
class Program < ActiveRecord::Base
has_many :user_program_records
has_many :users, through: :user_program_records
end
class UserProgramRecord < ActiveRecord::Base
belongs_to :user
belongs_to :program
# has a field "role"
end
아이디어는 시스템과 많은 프로그램에 많은 사용자가 있다는 것입니다. 프로그램에는 많은 사용자가 있으며 사용자는 여러 프로그램에 속할 수 있습니다. 그러나-주어진 프로그램 내에서 사용자는 하나의 역할 만 가질 수 있습니다.
내가 정말로 쓸 수 있기를 바라는 것은 :
Program.first.users.first.role
저에게 역할 (단지 String
) 을 반환하도록 합니다.
이를 수행하는 가장 깨끗한 방법은 무엇입니까? 기본적으로 사용자의 범위를 지정된 프로그램으로 지정하면 관련 조인 테이블의 필드에 어떻게 깔끔하게 액세스 할 수 있습니까?
당신은 그것에 대해 약간 잘못 생각하고 있습니다.
user.role
사용자가 다른 프로그램에서 다른 역할을 가질 수 있으므로 매우 모호합니다. 대신 조인 엔터티를 자체적으로 생각해야합니다.
가장 쉬운 방법은 결합 모델을 직접 선택하는 것입니다.
program = Program.includes(:user_program_records, :users).first
role = program.user_program_records
.find_by(user: program.users.first)
.role
연관 확장 및 도우미 메서드와 같은 것을 사용하여 좀 더 섹시하게 만들 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다