在Rails4上使用外部索引获取ActiveRecord值

时间:2014-12-20 15:46:23

标签: ruby-on-rails ruby activerecord

当我获得控制器中的成员列表时,我认为@Members是ActiveRecord的数组。

member_controller.rb

@members = Member.where(params[:param1])

所以我通常知道我在下面写下来展示。 member.html.erb

<% @members.each do |member| %>
    <%= member.name %>
<% end %>

但是在下面的情况下,我想写索引号至少循环10次这样。

<% (0..10).each do |idx| %>
    <%= idx %>:
    <%= members[idx].name %>
<% end %>

但它不起作用。它不能显示成员[idx] .name 我该怎么做?

5 个答案:

答案 0 :(得分:3)

为什么不直接使用each_with_index方法?

<% @members.each_with_index do |member, index| %>
  <%= index %>
  <%= member.name %>
<% end %>

如果您只需要10条记录,请在控制器上限制@members:

@members = Member.where(column: params[:column]).limit(10)

这对你有帮助吗?

答案 1 :(得分:2)

修复

<% (0..10).each do |idx| %>
    <%= idx %>:
    <%= @members[idx].name %>
<% end %>

您忘记使用@。它应该是@members,而不是members。而且,如果您对控制器的查询返回少于10,那么您的循环方式将崩溃。您将收到错误NoMethodError,例如NoMethodError: undefined method name' for nil:NilClass

你可以这样做,

<% @members.each_index do |idx| %>
    <%= idx %>:
    <%= @members[idx].name %>
<% end %>

答案 2 :(得分:1)

您可以使用each_with_index

<% @members.each_with_index do |member, idx| %>
    <%= idx %>:
    <%= member.name %>
<% end %>

然后,您可以使用limit来限制返回的记录数。

答案 3 :(得分:0)

不应该是

<% (0..10).each do |idx| %>
    <%= idx %>:
    <%= @members[idx].name %> #you forgot '@'here
<% end %>

虽然each_with_index是一个更好的选择

答案 4 :(得分:0)

谢谢大家。它工作!!

<% (0..10).each do |idx| %>
    <%= idx %>:
    <%= @members[idx].nil? ? '': @members[idx].name %>
<% end %>