【问题标题】:Loop in Ruby on Rails html.erb file在 Ruby on Rails html.erb 文件中循环
【发布时间】:2014-08-24 21:14:39
【问题描述】:

大家 我是 Ruby on Rails 的新手,我需要了解一些东西。我有一个实例变量(@users),我需要在 html.erb 文件中循环它有限的次数。 我已经用过这个了:

<% @users.each do |users| %>
   <%= do something %>
<%end %>

但我需要将其限制为 10 次。我能做什么?

【问题讨论】:

  • 你能不能把.limit(10)添加到你的活动记录查询中

标签: html ruby-on-rails ruby loops erb


【解决方案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 的回答所示。
      猜你喜欢
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2016-05-11
      • 2013-05-22
      • 2019-04-29
      • 1970-01-01
      相关资源
      最近更新 更多