首页 > 解决方案 > 有没有办法通过使用 Ransack 左连接后添加的列进行搜索?

问题描述

我有模型ItemUser. 该模型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 实现我的目标,或者我必须创建我的自定义搜索系统或使用另一个。

标签: ruby-on-railsransack

解决方案


推荐阅读