在我的Ruby on Rails 4(ruby 2.2)应用程序中,我有一个视图:
<%= sanitize( @template.render(
'text1' => modal['text1'],
'text2' => modal['text2'],
'text3' => modal['text3'],
'text4' => modal['text4'],
'image1' => modal['image1'],
'image2' => modal['image2'],
'image3' => modal['image3']
goes on like this....
)
) %>
你在上面看到的地方&#39;继续这样下去&#39;,因为我想分析它并使用来自这个常数的dirctly值:
MODAL_ELEMENTS = [ "text1",
"text2",
"text3",
"text4",
"image1",
"image2",
"image3",
"video1",
"video2",
"video3",
"..."
]
我想找到一种方法来改变sanitize @ template.render中的内容,以便ruby循环遍历每个MODAL_ELEMENTS项(text1,text2,..)并将它们注入像#text;&#39; text1&# 39; =&GT; &#39;文本1&#39; =&GT;模式[&#39; text1&#39;],&#39; text2&#39; =&GT;上面代码中的模态[&#39; text1&#39;]。
今天我有这个,但它失败了:
<%= sanitize( @template.render(
MODAL_ELEMENTS.each { |element| element => modal[ element ] ) ) %>
困难还在于循环必须添加我们在这里以粗体显示的每个昏迷(&#34;,&#34;):
&#39;文本1&#39; =&GT;模态[&#39;文本1&#39;] ,
&#39;文本2&#39; =&GT;模态[&#39;文本2&#39;] ,
...
答案 0 :(得分:1)
假设您有一个名为modal
的散列,@template.render
也需要散列:
MODAL_ELEMENTS.each_with_object({}){ |element, memo| memo[element] = modal[element] }
使用#each
无法输出任何内容。该数组将被处理但不会返回另一个数组。如果您希望它返回某些内容,则应使用#map
。这将返回一个基于输入数组的数组。
使用#inject
或#each_with_object
,您可以处理Enumerable并且不会限制输出数组。这个例子在这里输出一个Hash。
答案 1 :(得分:1)
如果它只是你想要的那个字符串并且稍后会对该字符串进行评估,那么这段代码就可以了
MODAL_ELEMENTS.map{ |element| "'#{element}' => modal[ '#{element}' ]"}.join(", ")