неопределенный метод `имя_модели’ для #массива при использовании pagy gem

#ruby-on-rails #rubygems #pagy

Вопрос:

у меня такая проблема:

неопределенный метод «имя_модели» для массива#: 0x00007f3e929cc430

 { count:     collection.count(:all),
     page:      params[vars[:page_param]||Pagy::VARS[:page_param]],
     item_path: "activerecord.models.#{collection.model_name.i18n_key}" }.merge!(vars)
   end
 

вот мой data_controller.rb:

   def index
    @pagy, @datas = pagy(Data.active_only.where(data_location: @location).sort_by(amp;:id))
  end
 

вот мой application_controller.rb

 def pagy_get_vars(collection, vars)
    { count:     collection.count(:all),
     page:      params[vars[:page_param]||Pagy::VARS[:page_param]],
     item_path: "activerecord.models.#{collection.model_name.i18n_key}" }.merge!(vars)
   end
 

и, наконец, мое мнение

 <div>
<table id="tablestock" class="table_content table">
  <thead>
    <tr>
      <th>ID</th>
      <th>Date</th>
      <th class="sorting_disabled">Location</th>
      <th class="sorting_disabled">Name</th>
    </tr>
  </thead>

  <tbody>
    <% @datas.each do |data| %>
    <tr data-link="<%= data_path(data) %>"> 
      <td><%= data.id %></td>
      <td><%= data.created_at.strftime('%d %b %Y') rescue ("<b style='color:red; font-size:16px;'>ERROR</b>".html_safe)%></td>
      <td><%=data.data_location.location if data.location_id? %></td>
      <td><%= data.data_name.name if data.name_id? %></td>

    </tr>
    <% end %>
  </tbody>
</table>
  <div class="justify">
    <%= pagy_nav(@pagy).html_safe if @datas.present? %>
  </div>
</div>
 

Ответ №1:

Вы пытаетесь вызвать имя модели в массиве имя модели-это метод ActiveRecord отношения ActiveRecord::. Вы не указали код, в котором вызываете метод pagy_get_vars(коллекция, vars), но вам нужно убедиться, что коллекция-это какой-то тип объекта, у которого есть метод имя_модели, такой как отношение ActiveRecord::, а не массив.

Возможно, проблема начинается здесь:

 Data.active_only.where(data_location: @location).sort_by(amp;:id)
 

sort_by создает массив.

Вы могли бы использовать:

 Data.active_only.where(data_location: @location).order(:id)
 

Таким образом, результатом будет не массив, а отношение ActiveRecord::.