我使用View
中的以下代码循环浏览对象列表:
<% @myquiz.each do |x| %>
<div id="myDiv">
<%= x.quiz_ID %>
</div>
<% end %>
这很好用,它会将ID打印到页面上。但是我觉得如果我不必放置这么多套<%
和<%=
s
以下情况更可取,但它不起作用:
<% @myquiz.each do |x|
render :text "<div>#{x.quiz_ID}</div>"
end %>
在没有3套put
标签的情况下,是否有办法在上面的循环中将<%
信息传递到屏幕上?以及我希望在页面上显示的每个后续值的另一个&lt;%标记。
答案 0 :(得分:1)
<%= @myquiz.map(&:quiz_ID).join(', ') %>
答案 1 :(得分:1)
以下是一些提示,仅仅是为了给Ruby方法提供一些指示。
# Original
<%= @myquiz.each do |x|
puts "<div>" . x.quiz_ID . "</div>"
end %>
<%= expression %>
将导致表达式在HTML中可见。因此,您必须操纵表达式的返回值。您在那里使用.each
,而为此目的, .map
更合适,因为它将返回一个数组,其中包含每个输入变量的块输出。
在块中,最后一个语句是返回值,无需打印东西。
最后,像['A', 'B', 'C']
这样的数组仍然希望通过一些换行符加入,因此表达式需要与 .join('<br />')
结合。 < / p>
这是一团糟,但无论如何,这里是:
<%= @myquiz.map {|x| "<div>#{ x.quiz_id }</div>" }.join("<br />").html_safe %>
# or
<%= @myquiz.map(&:quiz_id).map { |id| "<div>#{ id }</div>" }.join("<br />").html_safe %>
不要在家里这样做。认真。请注意.map如何工作,如何收集返回值(最后一个语句),以及如何连接数组元素以形成字符串。
更多选项:
DHH会做什么?
大概可以使用额外的括号,或者将逻辑移到其他地方(进入帮助器或装饰器)并输出某种<%= quiz_results %>
。
我该怎么办?
请查看Slim和slim-rails
,以便对其进行整合并自动生成.html.slim
次观看。
# In a slim view
- @quizzes.each do |quiz|
div = quiz.id
答案 2 :(得分:0)
使用咖喱括号进行阻止
<%= @myquiz.each { |x| puts x.quiz_ID } =%>
如果块中的语句超过2 你应该用&#39; do-end&#39;来编写块,这是正确的。