我正在使用带有Rails的Mongoid。我有两个模型:A sprint
和build
。 build
有许多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值。
答案 0 :(得分:0)
ActiveRecord where
方法用于构造SQL查询。它不知道如何处理Sprint
对象作为哈希值。您需要查找一些Sprint
属性,例如id
。