此功能来自mongodb网站: http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails
def self.threaded_with_field(story, field_name='votes')
comments = find(:all, :conditions => {:story_id => story.id}, :order => "path asc, #{field_name} desc")
results, map = [], {}
comments.each do |comment|
if comment.parent_id.blank?
results << comment
else
comment.path =~ /:([\d|\w]+)$/
if parent = $1
map[parent] ||= []
map[parent] << comment
end
end
end
assemble(results, map)
end
它只是使用数组和哈希来绊倒我。字符如||,&lt;&lt;和此字符串“|| = []”。我理解活动记录和功能的其余部分。否则我只会阅读Ruby书的前60页左右,我不想这样做。
答案 0 :(得分:1)
此方法无法直接翻译。它依赖于几种仅存在于ActiveRecord
或Mongoid::Document
类中的框架方法(例如Model#find
) - 除非您在Python中使用相同的框架,否则您还必须自己实施这些方法。
答案 1 :(得分:1)
回答有关<<
或||= []
等运营商的问题:
<<
将一个元素附加到数组(或追加字符串),在上面的例子中,它用于将comment
对象附加到结果数组或者线程化的东西。||=
基本上意味着,如果左侧是未定义的,那么评估&amp;分配右侧([]
与Array.new
)=&gt;相同“如果map[parent]
未定义,请使用Array.new
进行初始化 - 否则不执行任何操作”上面的方法创建一个包含父注释(results
)的数组和一个带有子注释的哈希(map
)。