Rails ActiveRecord where子句不起作用

时间:2013-09-19 17:07:31

标签: ruby-on-rails mongoid

我正在使用带有Rails的Mongoid。我有两个模型:A sprintbuildbuild有许多sprints

sprint.rb:

class Sprint
  include Mongoid::Document
  belongs_to :build
end

build.rb:

class Build
  include Mongoid::Document
  has_many :sprints
end

sprints中,我希望获得包含当前sprint的所有builds,所以我这样做:

def builds
    Build.where("sprint" => self)
end

在我的show.html.erb sprints中,我这样做:

<%= render @sprint.builds %>

然而,我得到一个例外:

  Sprint的

undefined method bson_dump ':0x007fd1acb68200

如果我将构建方法更改为:

  def builds
    list = []
    Build.all.each do |build|
      if build.sprints.include? self
        list.push(build)
      end
    end
    list
  end

然后一切正常,我得到了预期的结果。问题是什么?

修改 我还应该补充一点,并非所有构建都有sprint,这意味着某些构建可能具有sprint的nil值。

1 个答案:

答案 0 :(得分:0)

ActiveRecord where方法用于构造SQL查询。它不知道如何处理Sprint对象作为哈希值。您需要查找一些Sprint属性,例如id