我有两个型号;
class Foo
belongs_to :bar
end
class Bar
has 1, :foo
end
这一切都很好,关系工作正常等等。我们要求在Foo上覆盖“all”方法,以便始终将条件放入任何查询中。我们这样做了;
class Foo
def self.all(opts = {})
super(opts.merge(:hidden => false))
end
end
所有这一切都有效,但是当我运行以下命令时;
Foo.all.bar
它给了我以下错误:
“条件:隐藏不会映射到条形图中的属性”
在我超越'all'之前,那条线路完全正常。我不明白为什么它将“隐藏”应用于'bar'对象而不是'foo'对象!
答案 0 :(得分:0)
如果有其他人遇到这个,我最终解决了这个问题。问题出在datamapper返回的“query”对象中 - 它包含对“模型”的引用,如果这不是您的条件所在的模型,则会得到我得到的错误。基本上,绕过它的方法是对模型进行检查,如此;
class << self
#Alias out the original all
alias :unfiltered_all :all
def all(opts = {})
query = unfiltered_all(opts)
if(query.model.ancestors.include? self)
return query.unfiltered_all(:hidden => false)
else
return query.all(:foo => { :hidden => false } )
end
end
end