在 Ruby on Rails html.erb 文件中循环
Posted
技术标签:
【中文标题】在 Ruby on Rails html.erb 文件中循环【英文标题】:Loop in Ruby on Rails html.erb file 【发布时间】:2014-08-24 21:14:39 【问题描述】:大家 我是 Ruby on Rails 的新手,我需要了解一些东西。我有一个实例变量(@users),我需要在 html.erb 文件中循环它有限的次数。 我已经用过这个了:
<% @users.each do |users| %>
<%= do something %>
<%end %>
但我需要将其限制为 10 次。我能做什么?
【问题讨论】:
你能不能把.limit(10)
添加到你的活动记录查询中
【参考方案1】:
如果@users
的元素多于您想要循环的元素,您可以使用first
或slice
:
使用first
<% @users.first(10).each do |users| %>
<%= do something %>
<% end %>
使用slice
<% @users.slice(0, 10).each do |users| %>
<%= do something %>
<% end %>
但是,如果您实际上并不需要 @users 数组中的其余用户,则应该使用 limit
加载所需数量的用户:
@users = User.limit(10)
【讨论】:
【参考方案2】:为什么不限制用户?
<%= @users.limit(10).each do |user| %>
...
<%end%>
这仍然会使用 ActiveRecord,因此您可以享受 AR 功能的好处。你也可以做很多事情,比如:
@users.first(10)
或@users.last(10)
【讨论】:
【参考方案3】:你可以的
<% for i in 0..9 do %>
<%= @users[i].name %>
<% end %>
但如果视图中只需要 10 个用户,那么可以在控制器本身中进行限制
@users = User.limit(10)
【讨论】:
在控制器中做这个限制是正确的做法。假设您有 100 万条用户记录,而您只需要显示 10 个用户!通过要求数据库限制返回的行数,可以提高数据库和内存使用的性能。如果您希望视图文件具有一定的灵活性,您可以要求控制器返回 50 个用户,并让视图限制为 10(50 以下的变量)。 在 Ruby 中使用 For 循环被认为是不好的做法,如果可能,应该使用 .each 循环。正如 Mohamed El Mahallawy 的回答所示。以上是关于在 Ruby on Rails html.erb 文件中循环的主要内容,如果未能解决你的问题,请参考以下文章