有没有一种方法可以使用Ransack在左联接后按添加的列进行搜索?

时间:2019-08-08 12:57:28

标签: ruby-on-rails ransack

我有模型ItemUser。模型Item具有属性name,但是我想由用户使用自定义名称,因此我创建了一个中间表及其各自的模型ItemsUser和自己的{{1} }。

现在,我试图将此属性包含在一个表中,在该表中显示已登录用户的所有项目。在此表中,我使用Ransack按某些列值排序和查找记录。

为了找到我尝试使用的方法:name或使用: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)时,效果很好。

在视图中,我具有以下要订购的代码,但是在检查ransack方法生成的SQL时,看不到order子句:

@q.result.first.custom_name

和以下代码查找:

= 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

我不知道我是否可以使用Ransack实现目标,还是必须创建自己的自定义搜索系统或使用另一个系统。

0 个答案:

没有答案