ruby框架方法 - >这里发生了什么?

时间:2009-09-01 04:26:54

标签: ruby syntax

def partial(template, *args)
  options = args.extract_options!
  options.merge!(:layout => false)
  if collection = options.delete(:collection) then
    collection.inject([]) do |buffer, member|
      buffer << erb(template, options.merge(:layout =>
      false, :locals => {template.to_sym => member}))
    end.join("\n")
  else
    erb(template, options)
  end
end

此方法没有文档。这似乎是让你在erb模板中为部分渲染添加其他功能的一些方法。

这个Ruby代码如何工作?

我并不关心它在Web框架中扮演的角色。我只是想了解Ruby语法方面的情况。

2 个答案:

答案 0 :(得分:2)

它的工作方式与在Rails中执行render :partial非常相似 - 它采用部分和选项列表(例如,使用部分渲染的对象集合),并使用这些选项呈现部分。除了这个方法似乎有ERb硬编码。如果这是来自Rails,我认为这必须是一个非常古老的方法,不适合使用,但尚未被删除(可能与某些东西或其他东西兼容)。 / p>

options.merge!(:layout => false)实际上就像在做options[:layout] = false

options.delete(:collection)从options散列中删除“:collection”的条目,如果存在则返回它。如果没有集合条目,则返回nil,因此关联的if-block将不会运行。如果有一个集合,它会为集合的每个元素呈现partial,并返回渲染所有元素的累积结果。如果没有集合,它只会使用指定的选项呈现部分。

答案 1 :(得分:0)

要理解这一点,您需要了解这些方法的文档:

  • extract_options!
  • Enumerable / Array:合并,合并!,注入,加入,删除

一旦你理解了这些,这里的语法就没什么大不了的了。你应该能够直接阅读它。

特别是什么?