我想显示一个随机对象

时间:2017-06-04 10:15:51

标签: ruby-on-rails ruby

我想在卡片中显示一个随机对象。

<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"

我不明白。你能救我吗?

2 个答案:

答案 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)