2010-08-16 2 views
1

Ruby on Rails 애플리케이션에서 코드가 직접 many-to-many 조인 테이블에 직접 액세스한다. 이는 has_many와 : has_many : through 관계를 통해 생성 된 정상적인 연관과 메소드를 우회하기 때문에 코드의 일부를 수정하는 것을 매우 어렵게 만든다.many-to-many 조인 테이블에 직접 액세스해야하는 이유는 무엇입니까?

제 질문은 간단합니다. 수행 할 수있는 허용 가능한 작업입니까, 아니면이를 피할 수 있습니까?

내 생각에 데이터베이스 관점에서, 조인 테이블은 논리보기에 존재하지 않습니다. 따라서 직접 액세스 할 수있는 이유가 없어야합니다. 사람들은 단지 그들이 존재한다는 것을 무시하고 프레임 워크가 그것들을 돌 보도록해야합니다.

다른 사람들의 생각은 무엇입니까?

Person { name } 
Group { name } 
PersonGroup { person_id, group_id, membership_state } 
PersonGroup.find(:all, :conditions => {:membership_state => 'pending'} } 

을 내가 대신 조인 테이블을 사용하여 생각하고 한 범위 그룹에 요청을 대신해야하고 찾을 : 다음은 지금까지 코드에 표시하는 경우는

, 나는 궁금를 더 정확하게하려면 모든 보류중인 회원들을 그렇게합니다.

답변

0

나는 "피해야한다"고 말할 것입니다. 조인 테이블의 데이터를 실제로 조작해야하는 경우 해당 테이블에 매핑 한 ActiveRecord 객체를 만든 다음 해당 객체를 조작하는 것이 좋습니다. 일반적으로 Object/Relational 프레임 워크 (ActiveRecord뿐만 아니라)를 사용하면 합병증을 유발할 때 직접적인 데이터 조작을 발견했습니다.

+0

나는 내 질문에 약간 불분명했다. 필자는 테이블에 직접 액세스하지 않고 join 테이블을 나타 내기 위해 activerecord 모델을 사용하는 것에 대해 언급하고 있습니다. –

+0

PersonGroup이 조인 테이블이 아닌 state가있는 객체 (이 경우 membership_state)로 작동하기 때문에 이는 많은 의미가 있습니다. 이름이 지정된 범위가 아닌 자체 개체가되는 것이 틀림 없습니다. –

관련 문제