我试图创建Rails帮手,需要一个块,并遍历该生产:遍历块轨道帮手
<span data-param1="param1" data-param2="param2">
<span data-options="test">
<span data-options="test">
</span>
在使用助手的一个例子:
<%= main(param1, param2) do %>
<%= sub('param', :options => 'test') %>
<%= sub('param', 'test') %>
<% end %>
然后助手自己:
module MyHelper
def main(param1, param2, &block)
raise ArgumentError.new('Missing block!') unless block_given?
content_tag :span, :data => { :param1 => param1, :picture => '' } do
markup = content_tag(:span, '', :data => { :param2 => param2 }).to_s
#loop through blocks of subs
&block.each do |item|
sub = sub(item.param, item.options)
data = { :param => param }
data[:options] = sub.options unless sub.options.blank?
markup << content_tag(:span, '', :data => data).to_s
end
markup
end
private
def sub(param, options = {})
options = extract_options!(options)
end
# returns a string
def extract_options!(options)
when String
options
when Hash
#removed for this question
else
raise ArgumentError.new('Only Hash && String allowed!')
end
end
注:我已经删除了Hash
在extract_options处理,以保持问题代码简短。
但是它不喜欢的&block
环并给出了此错误:
syntax error, unexpected &, expecting keyword_end
&block.each do |item|
^
让这个无论它需要的'sub'方法构造并把它推到'标记'和'main'只是'yield'或'block.call',你现在有'&block.each'。迭代块没有意义。 – ndn