我有模型Item
和User
。模型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实现目标,还是必须创建自己的自定义搜索系统或使用另一个系统。