当我获得控制器中的成员列表时,我认为@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 我该怎么做?
答案 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 %>