使用多个可选参数在Rails中搜索数据库



我有一个Rails应用程序与以下模式:

User (id, username, user_type, master_id)项目(id,itemname,is_master,master_id)修理(id, in_date, out_date, user_id, item_id)

应用程序很小,所以我尽量保持db尽可能简单。用户可以是Admin、Dealer或Manager。一个经理可以有多个经销商(都存储在同一个用户表中)。

一个项目可以是一个主项目,如计算机(有许多子项目,如键盘,鼠标),也可以只是一个小的子项目。一个主条目下可以有多个子条目。

A repair是该项目的维修历史记录。一个修复有一个项目和关联的用户。

我有一个搜索与以下参数(所有可选)

  • 管理器名称
  • <
  • 经销商名称/gh><
  • 主项目/gh>
  • 子条目
  • 在日期
  • 出单日期

如果没有指定经销商名称,我希望结果包含指定管理器中的所有经销商,如果没有指定子项目,我希望主项目下的所有项目都在结果中。

如何定义搜索控制器以保持代码简单和可维护?

Item.joins :repairs => :user

将为您完成从物品到修理到用户的连接。在此之后,如果提供了各个字段,只需按相等性过滤即可。幸运的是,您可以在rails中非常习惯地做到这一点,通过构造搜索表单,使字段名称与.where的哈希值相匹配。

你需要过滤掉所有的空参数(空或nil),这取决于你的视图的结构。params.reject {|k,v| v.blank?}应该为你做。

把它们放在一起,然后

Item.joins(:repairs => :user).where(params.reject {|k,v| v.blank?})

如果您已经设置了关联帮助器(您绝对应该这样做),

或类似于

的内容可能会奏效。

相关内容

  • 没有找到相关文章

最新更新