有人可以将这个从Ruby翻译成Python。这是一个基本的地图功能

时间:2011-02-15 19:45:02

标签: python ruby-on-rails ruby mongodb

此功能来自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页左右,我不想这样做。

2 个答案:

答案 0 :(得分:1)

此方法无法直接翻译。它依赖于几种仅存在于ActiveRecordMongoid::Document类中的框架方法(例如Model#find) - 除非您在Python中使用相同的框架,否则您还必须自己实施这些方法。

答案 1 :(得分:1)

回答有关<<||= []等运营商的问题:

  • <<将一个元素附加到数组(或追加字符串),在上面的例子中,它用于将comment对象附加到结果数组或者线程化的东西。
  • ||=基本上意味着,如果左侧是未定义的,那么评估&amp;分配右侧([]Array.new)=&gt;相同“如果map[parent]未定义,请使用Array.new进行初始化 - 否则不执行任何操作”

上面的方法创建一个包含父注释(results)的数组和一个带有子注释的哈希(map)。