在项目开发中,可能会出现这样的需求:用户需要保存自己的搜索选项,例如一个高级搜索页面,特定用户会用特定的多个参数组合去搜索自己想要的内容,然后每次调用都要重新输入这些参数显然会严重降低用户体验。此时就需要将用户的参数保存起来,供其以后随时调用。
实现的思路也非常简单,我们可以建一张user_searchs表,里面存储用户的id,保存搜索的类型search_type(用于支持保存不同页面的高级搜索)、保存的名称title(方便用户自己识别)以及保存搜索参数的conditions字段。
要实现保存搜索参数,rails已经提供了非常简便成熟的方法,根本不需要开发者自己再手动写这个功能。
比如一个使用ransack的项目信息高级搜索页面,ransack传递到action的高级搜索参数是params[:q](典型的哈希键值对),常规可以有两种方法来保存这个参数
1.YAML: YAML.dump(params[:q]) YAML.load(params[:q])
2.JSON : params[:q].to_json JSON.parse(params[:q])
目前比较主流还是JSON。
我们可以轻松惬意地使用.to_json方法将params[:q]保存进数据库,然后使用JSON.parse()方法来读取保存的参数,绑定的相应搜索页面的表单中,让用户实现一键调取搜索参数,并可以在此基础上继续调整参数,然后选择保存或者另存为新的搜索。
本书叙述的虽然是一个非常简便的小方法,但其实用性是非常高的!