为什么字段 "line_type_eq" 在我看来可以通过 f.object.line_type_eq 访问,但名为 "deleted_eq" 的字段始终 returns 为零?

Why is field "line_type_eq" accessible in my view with f.object.line_type_eq but a field called "deleted_eq" always returns nil?

我正在使用 Ransack 搜索包含多个字段的数据库。在视图方面,我使用 search_form_for @q.[=15= 从控制器作为 @q 预填充我的搜索表单中的默认字段值,该查询在视图中可用]

在整个表单中,它工作成功,但是当我尝试使用 f.object.deleted_eq 访问它以检查值时,我的字段 deleted_eq 总是 returns nil。尽管其他字段查询值在同一位置使用相同格式正确 returned,例如f.object.line_type_eq.

"deleted"是Ransack中的特殊字段名吗?我查询中的所有字段都在控制器中按预期工作 return 正确的结果。

更改 "deleted" 的名称需要数据库迁移和项目中的大量代码更改,因此我希望在进行所有这些更改以进行测试之前检查它是否是保留名称。

编辑以获取更多信息: Rails 5.2.1,搜查 2.0.1

deleted_eq 是使用 f.select 完成的下拉菜单,带有映射到 'true'、'false' 和 '' 的描述性文本选项名称。所以是的,最终我相信 Ransack 将其作为布尔值处理。

<%= f.select :deleted_eq, options_for_select([['Active Records', 'false'],
['Deleted Records Only', 'true'], ['Active and Deleted Records', '']],
f.object.deleted_eq || 'false'), {}, { :class => 'form-control',
:onChange => "searchOnchange();" }  %>

想通了。

如果提供空白值,deleted_eq 似乎可以为 nil。我最幸运地采用了我在网上找到的另一个解决方案,如下所示:

<%= f.select :deleted_eq, [['Active Records', 0], ['Deleted Records', 1]],
   { include_blank: 'All Records', selected: params[:q] ? params[:q][:deleted_eq] : 0 },
   {:class => 'form-control', :onChange => "searchOnchange();" } %>

令人遗憾的是 include_blank 选项 ("All Records") 始终必须显示为下拉列表中的第一项,但由于我可以选择开始选择的内容,而且我可以选择"Active Records",不是世界末日