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语法方面的情况。
答案 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)
要理解这一点,您需要了解这些方法的文档:
一旦你理解了这些,这里的语法就没什么大不了的了。你应该能够直接阅读它。
特别是什么?