嘿。我从Agile Web Development获得了一些代码,它围绕方法调用包装了一些HTML:
# from tagged_builder.rb, included as a FormBuilder helper
def self.create_tagged_field(method_name)
define_method(method_name) do |label, *args|
@template.content_tag("p",
@template.content_tag("label" ,
label.to_s.humanize.capitalize,
:for => "#{@object_name}_#{label}")
+
super)
end
end
我想在标签content_tag中嵌套span标签,以便最终输出符合以下几行:
<p><label>Name
<span class="small">Add your name</span>
</label>
<input type="text" name="textfield" id="textfield" />
我想知道如何包含span的内容(比如'警告'这样的变量)
我尝试了各种各样,但无济于事。方法调用ok(例如f.text_field:name将生成
<p><label for="object_name">Name</label></p>
试过这个:
def self.create_tagged_field(method_name)
define_method(method_name) do |label, warning, *args|
@template.content_tag("p",
@template.content_tag("label" ,
label.to_s.humanize.capitalize+
content_tag("span", warning),
:for => "#{@object_name}_#{label}")
+
super)
end
end
但没有运气。任何人都可以引导我朝着正确的方向前进吗?谢谢,A
答案 0 :(得分:1)
您需要致电@template.content_tag
。你在那里的代码只是调用self.content_tag,它显然没有做任何事情。
答案 1 :(得分:1)
只想发布最终解决方案,更多的是为了骄傲而不是其他任何东西。 Noob ......:0
def self.create_tagged_field(method_name)
define_method(method_name) do |label, *args|
# accepts the warning hash from text_field helper
if (args.first.instance_of? Hash) && (args.first.keys.include? :warning)
warning = args.first[:warning]
end
@template.content_tag("label" , label.to_s.humanize+(@template.content_tag("span", warning, :class =>'small')),
:for => "#{@object_name}_#{label}") +
super
end
end