循环遍历View中的对象列表并使用单个<%=打印值

时间:2013-04-12 08:50:29

标签: ruby-on-rails loops

我使用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;%标记。

3 个答案:

答案 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 %>

我该怎么办? 请查看Slimslim-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;来编写块,这是正确的。