2010-11-21 2 views
1

간단한 쿼리를 수행하려고하는데 Datamapper가 올바른 결과 집합을 반환하지 않는 것 같습니다.Datamapper가 올바른 쿼리를 수행하지 않습니다.

이것은 매우 기본적인 것처럼 보이기 때문에 잘못된 이유가 없습니다.

나는 아마도 구문 문제라고 생각합니다. 이 관계 코드의 버그 인의 가능성이 있습니다

class User 
has n, :answers 
property :id, Serial 
property :name, String 
end 

class Answer 
belongs_to :user 
has n, :topics, :through => Resource 
property :id, Serial 
property :text, Text 
end 

class Topic 
has n, :answers, :through => Resource 
property :name, String, :key => true 
end 

o=User.create(:name=>'tom') 
puts a=Answer.create(:user=>o, :text => 'a1', :topics => [ 
Topic.first_or_create(:name => 'aboutme'), 
Topic.first_or_create(:name => '@onetom') 
]) 

#THIS WORKS 
#puts Answer.all(:user => {:name => 'tom'}, :topics => [{:name => 'aboutme'}]) 

#THIS DOES NOT WORK 
#puts o.answers.all(:topics => [{:name => 'aboutme'}]) 

답변

3

올바른 매개 변수를 사용하고 있지 않습니다. 연결에 조건을 추가하려면 도트 표기법을 사용해야합니다. 여기에 예제 스크립트를 만들었습니다.

https://gist.github.com/709867
+0

고마워요! 문제 해결됨! = D –

0

은 (당신이 플러그인 중첩 된 속성을 사용하고있는 것 같습니다?)

DataMapper에 대한 하나 개의 좋은 점은 당신이 어떤 쿼리를 확인할 수 있다는 것입니다 생성 중입니다. 컬렉션 끝에 ".query"태그 만 붙이면 쿼리 개체가 나옵니다.

Answer.all(:user=>{:name=>'tom'}, :topics => [{:name => 'aboutme'}]).query이 경우.

q = Answer.all(:user=>{:name=>'tom'}, :topics => [{:name => 'aboutme'}]).query 
DataMapper.repository.adapter.send(:select_statement, q) 

는 샷이 발생되는 쿼리 개체를 게시 심지어 이상한 여부 (또는 뭔가를하고 있는지 여부에 대해 다시 게시 할 것을 보내기

당신은 또한 다음과 같은 SQL 쿼리를 수행하여 생성하는 것이 무엇 볼 수 있습니다 그리고 나는 볼 수있다).

관련 문제