Ruby on rails 搜索显示全部而不是过滤器

Ruby on rails 搜索显示全部而不是过滤器,ruby-on-rails,ransack,Ruby On Rails,Ransack,我试图使用Ransack gem,但它返回所有12000行,而不是使用过滤器 控制器: def列表 @q=LmiHost.ransack(参数[:q]) 如果!(params[:commit].nil?)然后 @计算机=@q.result 其他的 @computers=LmiHost.where(:job\u id=>121) 结束 结束错误在于没有指定正确的匹配器。如果要选择特定的作业id,应在表单中指明搜索匹配器 例如,你说的是job\u id它应该在哪里job\u id\u eq或者你希

我试图使用Ransack gem,但它返回所有12000行,而不是使用过滤器

控制器:

def列表
@q=LmiHost.ransack(参数[:q])
如果!(params[:commit].nil?)然后
@计算机=@q.result
其他的
@computers=LmiHost.where(:job\u id=>121)
结束

结束
错误在于没有指定正确的匹配器。如果要选择特定的作业id,应在表单中指明搜索匹配器

例如,你说的是
job\u id
它应该在哪里
job\u id\u eq
或者你希望它是什么样的匹配者

您应该在其中获取如下所示的搜索项

Ransack::Search<class: LmiHost, base: Grouping <conditions: [Condition <attributes: ["job_id"], predicate: eq, values: ["123"]>], combinator: and>> 
Ransack::搜索

在您的搜索中,我没有看到谓词,因此它会返回所有结果。

您的日志中的参数是什么样子的?Started GET”/computer/list?utf8=%E2%9C%93&q%5Bjob_id%5D=1726&commit=search“for 127.0.0.1 at 2018-02-03 23:26:12-0800由ComputerController处理#作为HTML参数列出:{“utf8”=>”✓", "q“=>{”作业id“=>”1726“},“提交”=>“搜索”}对我来说似乎没问题。为什么不在列表中放置一个“byebug”并使用params[:q]和@q.result进行调试,以查看那里到底发生了什么。(byebug)@q Ransack::Search(byebug)@q.result)#当您@q.result时,您看不到它生成的sql语句吗?你可以看到那里发生了什么,找出什么是错误的。我花了一段时间才明白这个答案的意思。详细说明一下,在视图中,
job\u id
应重命名为
job\u id\u eq
,其中
eq
是此处指定的匹配器之一。如果要匹配包含某些值的文本,请在视图中使用
job\u description\u cont
而不是
job\u description