在 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 的元素多于您想要循环的元素,您可以使用firstslice

使用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 文件中循环的主要内容,如果未能解决你的问题,请参考以下文章

如何改进 Ruby on Rails 视图中的代码

Ruby On Rails 部分渲染

Ruby on Rails 6 脚手架模板位于何处?

Ruby On Rails在脚手架之后添加新页面

导轨。 Dropdown1 使用 Ruby on Rails 启用 Drobdown2 选择

ActionNotFound(无法找到UsersController的动作'show'):ruby on rails