我正在尝试执行一个简单的查询,但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'}])
答案 0 :(得分:3)
您没有使用正确的参数,如果您想在关联上添加条件,则应使用点表示法。我在这里为你做了一个示例脚本:
答案 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)
给出一个镜头并回复它是否正在做一些奇怪的事情(甚至发布生成的查询对象,我可以看看)。