Datamapper未执行正确的查询

时间:2010-11-21 10:32:08

标签: ruby-on-rails ruby 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'}])

2 个答案:

答案 0 :(得分:3)

您没有使用正确的参数,如果您想在关联上添加条件,则应使用点表示法。我在这里为你做了一个示例脚本:

https://gist.github.com/709867

答案 1 :(得分:0)

关系代码中可能存在错误(看起来您正在使用嵌套属性插件?)

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)

给出一个镜头并回复它是否正在做一些奇怪的事情(甚至发布生成的查询对象,我可以看看)。