ruby-on-rails - 有没有办法通过使用 Ransack 左连接后添加的列进行搜索?
问题描述
我有模型Item
和User
. 该模型Item
具有属性name
,但我希望用户有一个自定义名称,因此我创建了一个中间表及其各自的ItemsUser
模型name
。
现在,我正在尝试将此属性包含在一个表中,在该表中显示已登录用户的所有项目。在此表中,我使用 Ransack 按某些列值排序和查找记录。
为了找到我尝试过使用::name_or_items_users_name_cont
或订购,sort_link(@q, :items_users_name, 'Custom Name')
但我需要进行自定义连接以按用户过滤,因此我无法使用这些解决方案。
我已经进入控制器:
@q = user.items
.joins("LEFT JOIN items_users ON items_users.item_id = items.id AND items_users.user_id = #{current_user.id}")
.select('items.*, items_users.name AS custom_name')
.ransack(params[:q])
当我检查custom_name
记录时它工作正常(例如@q.result.first.custom_name
)。
在视图中,我有下面的代码要排序,但是查看 ransack 方法生成的 SQL,我看不到 order 子句:
= sort_link(@q, :custom_name, 'Custom name')
和下面的代码找到:
= search_form_for @q, url: manager_items_path do |f|
= f.search_field :name_or_custom_name_cont
= f.button :submit
但是当我渲染视图时出现以下错误:
undefined method `name_or_custom_name_cont' for Ransack::Search<class: Item, base: Grouping <combinator: and>>:Ransack::Search
我不知道我是否可以使用 Ransack 实现我的目标,或者我必须创建我的自定义搜索系统或使用另一个。
解决方案
推荐阅读
- python - 如何通过将日期与该数据框中的日期时间对象进行比较来获取数据框中的索引值?
- scala - 如何将响应正文字段传递给其他请求的正文(加特林)
- outlook-web-addins - 调用 saveAsync 更改 ChangeKey
- java - 正则表达式或字符串操作从字符串派生自动模块名称
- laravel-5 - 新的 Laravel 应用程序页面加载缓慢
- scala - Scala/Spark:如何检查数据框是否包含特定的列列表?
- javascript - 修改没有突变的数组
- node.js - 在 Heroku 应用程序中的 Safari 上阻止 socket.io CORS 请求
- bash - 使用 UNIX less 命令更改正在显示的文件的颜色设置
- javascript - JavaScript - 全局变量的 Firebase 值