我想在卡片中显示一个随机对象。
<div class="row">
<% @slots.sample(3).each do |slot| %>
<div class="col-md-4 col-sm-6">
<div class="card-image">
<%= link_to slot_path(slot) do %>
<% if slot.photo? %>
<%= cl_image_tag slot.photo, class: "img-rounded img-responsive", height: 262, width: 195 %>
<% else %>
<%= image_tag "image_placeholder.jpg", class: "fileinput-new thumbnail img-no-padding", height: 250, width: 400 %>
<% end %>
<% end %>
<div class="details">
<div class="author">
<%= link_to slot_user(slot) do %>
<%= cl_image_tag slot.user.photo, class: "img-circle img-no-padding img-responsive" %>
<span class="name"><%= slot.name %></span>
<span class="meta"><%= slot.user.first_name %> <%= slot.user.last_name %></span>
<% end %>
</div>
</div>
</div>
</div>
<% end %>
</div>
我的代码返回错误消息,如:
"undefined method `sample' for nil:NilClass",
"undefined method `photo' for nil:NilClass",
"undefined method `user' for nil:NilClass"
我不明白。你能救我吗?
答案 0 :(得分:0)
您可以在conntroller中随机化@slots集合,例如:
@slots = Slot.where(id: Slot.pluck(:id).sample(3))
然后直接在视图中使用
<% @slots.each do |slot| %>
答案 1 :(得分:0)
在Ruby on Rails(ActiveRecord)中获取随机对象的文献资料不多,但这很容易。
很明显:从任意数组中获取两个随机对象:
@users = User.all
@users.sample(2)
这将从数据库中获取所有对象,并将它们放入一个数组(@users)中,从中选择两个随机对象。如果碰巧需要数组中的所有对象,这很好。如果没有,那么您最好去做一些更好的事情:
User.order('RANDOM()').limit(2)
这只会以随机顺序从数据库读取两个条目。因此,在数据库上比第一个命令要容易得多。
命令语法适用于PostgreSQL-对MySQL使用'RAND()'。
需要注意的一件事是default_scope。如果您为obj类设置了default_scope,请改用reorder:
User.reorder('RANDOM()').limit(2)