【发布时间】:2010-12-04 05:47:42
【问题描述】:
这个有点扭曲我的面条。
我有类似的东西(如果重要的话,在 Rails 3 引擎中)
class Builder
def initialize
@foos = []
end
def foo(&block)
@foos << helper.capture(&block) #helper being a class that is including ActionView::Helpers
end
def to_html
@foos.join "\n"
end
end
module ApplicationHelper
def widget
b = Builder.new
yield b
b.to_html
end
end
#in a view somewhere
<%= widget do |b| %>
<% b.foo do %>
static content
<% end %>
<% end %>
一切都很好,但是嵌套的静态内容会输出两次——一次是我想要的,一次是调用widget的地方。
根据我的阅读,capture 应该可以解决这个确切的问题。我很确定问题源于我调用捕获的方式(来自包含ActionView::Helpers 的虚拟代理类),但问题是b.foo 调用正在调用类实例上的方法,而不是来自某事物的上下文这将被混合到模板中。
有没有办法解决这个问题?还是我从错误的方向接近这个。我正在尝试对一些相当复杂的东西进行建模,并且对 api 非常满意,但似乎无法解决这个问题。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3