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'}])

person ming yeow    schedule 21.11.2010    source источник


Ответы (2)


Вы используете неправильные параметры, если вы хотите добавить условия для ассоциаций, вы должны использовать запись через точку. Я сделал для вас пример скрипта здесь:

https://gist.github.com/709867

person solnic    schedule 22.11.2010

Возможно, в коде отношений есть ошибка (похоже, вы используете плагин вложенных атрибутов?)

Одна приятная особенность DataMapper заключается в том, что вы можете проверить, какой запрос генерируется. Просто пометьте «.query» в конце любой коллекции, и вы получите объект запроса.

Answer.all(:user=>{:name=>'tom'}, :topics => [{:name => 'aboutme'}]).query в данном случае.

Вы также можете увидеть, какой SQL сгенерирует запрос, выполнив следующие действия:

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

Сделайте это и отправьте ответ о том, делает ли он что-то странное или нет (или даже опубликуйте сгенерированные объекты запроса, и я могу взглянуть).

person knowtheory    schedule 21.11.2010