ruby-on-rails - 使用 pagey gem 时 #Array 的未定义方法“model_name”
问题描述
我遇到了这个问题:
#Array:0x00007f3e929cc430 的未定义方法“model_name”
{ 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(&: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>
解决方案
您试图在数组上调用 model_name model_name 是 ActiveRecord::Relation 的 ActiveRecord 的一种方法。您没有提供调用 pagy_get_vars(collection, vars) 方法的代码,但您需要确保该集合是某种对象类型,该对象类型具有诸如 ActiveRecord::Relation 之类的 model_name 方法,而不是数组。
也许问题从这里开始:
Data.active_only.where(data_location: @location).sort_by(&:id)
sort_by 正在创建一个数组。
你可以使用:
Data.active_only.where(data_location: @location).order(:id)
这样,结果就不是一个数组,而是一个 ActiveRecord::Relation。
推荐阅读
- javascript - 离子 4 + HttpInterceptor + 令牌
- powershell - 运行 install-package 而不提示安装 nuget
- recursion - 如何在没有运行时多态性的情况下对迭代器执行 N 次“flat_map”(或类似操作)?
- bash - 如何使用 shell 命令运行 tmux
- java - 如何将主类中的变量导入另一个类
- python - Python Pandas 根据“x”值的倍数更新值
- node.js - 错误:ENOENT:.staging 文件夹的所有文件中都没有这样的文件或目录
- python - 我如何制作一个循环,每行打印一个列表的 6 个元素?
- .net - 用于 cefsharp 71.0.2 的点网框架
- bash - 我可以在 2 个单独的终端窗口中查看进程的标准输出和标准错误吗?