我有一个帮助程序,可以创建邮件程序模板行(html)。我希望能够将样式传递给行(可选),就像背景颜色一样。
module MailHelper
def module_row(&block)
h << "<table border='0' cellpadding='0' cellspacing='0' width='100%'>"
# more table html here
h << capture(&block)
# more table html here
h << "</table>"
raw h
end
end
我希望能够选择性地传递背景颜色,但我似乎无法在传递&#39;&amp; block&#39;时弄清楚如何做到这一点。这在Ruby中是否可行?
答案 0 :(得分:1)
你确定可以!
module MailHelper
def module_row(options={}, &block)
...
if options[:foo]
do_foo_stuff
end
end
end
<% module_row(foo: true) do |x| %>
...
<% end %>
通常的做法是定义这样的默认值:
def module_row(options={}, &block)
opts = {
foo: true,
background_color: 'black'
}.merge!(options)
if opts[:foo]
do_foo_stuff
end
end
答案 1 :(得分:1)
您可以将选项作为哈希传递,例如:
module MailHelper
def module_row(**opts, &block)
bgcolor = opts[:bgcolor] || '#FFFFFF'
...
h << "<table border='0' cellpadding='0' cellspacing='0' width='100%'>"
# more table html here
h << capture(&block)
# more table html here
h << "</table>"
raw h
end
end
然后你可以打电话:
module_row(bgcolor: '#AAAAAA', &my_block)
或:
module_row(bgcolor: '#AAAAAA') { block content }