2010-07-06 4 views
2

내가 할당 된 특정 직원이있는 모든 단계를 찾기 위해 노력하고있어이협회 (Datamapper)

class Stage 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :staff 
end 

class Staff 
    include DataMapper::Resource 
    property :id, String, :key => true 
    property :full_name, String 
    property :email, String 
    has n, :stages 
end 

과 같이 두 가지 모델을 가지고에 의해 찾을 수 있습니다. 나는 시도했다 @stages = Stage.all(Stage.Staff => 'TM')

내가 뭘 잘못하고 있니?

답변

1

이 시도 할 거라고, 그 오랜만 내가 DataMapper을 사용하기 때문이다.

Stage.all(Stage.staff.id => 'TM') 

이것은 실제로 'TM'이 직원 구성원의 ID에 사용하는 값이라고 가정합니다.

+0

감사합니다. – Tom

0

내가

@stages = Stage.all(:staff => 'TM') 
+0

오류를 반환하지 않지만 데이터를 반환하지 않습니다. 제목과 같은 다른 필드에서 실행하면 괜찮습니다. 외래 키는 아닙니다. – Tom

+0

@Tom 테스트 할 수 없습니다. 다음 링크와의 연관성을 나타내려고합니다. 'Stage.all (: links => [: staff], Stage.staff.id => 'TM')' – philant

2

사실이 같은 datamapper에서 문자열 키를 사용할 수 있습니다

Stage.all('staff.id' => 'TM') 

또는

Stage.all('staff.name.like' => 'Ted%') 

당신은 혼합뿐만 아니라 그 모델의 속성과 일치시킬 수 있습니다 :

Stage.all('staff.name.like' => 'Ted%', 'id.gte' => 5) 

그러면 'Ted'로 시작하고 5보다 크거나 같은 ID를 가진 사람들에게 속한 모든 스테이지를 가져옵니다.

+0

%, 감사에 대해 모르겠다 – Tom

+0

분명히하려면 %는 SQL 부분 문자열 일치 구문입니다. Stage.all ('staff.name'=>/^ Ted /)도 수행 할 수 있습니다.) 그리고 DataMapper는 일치/변환을 수행하는 방법을 알기에 충분히 똑똑합니다. – knowtheory