Datamapper链接条件似乎是共享条件

时间:2014-02-03 17:24:00

标签: ruby ruby-on-rails-3 datamapper ruby-datamapper

我有两个型号;

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'对象!

1 个答案:

答案 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