繁体   English   中英

在ReSTful rails模型中搜索操作

[英]Search action in ReSTful rails model

所以,我对Rails很陌生,并且仍在努力完成这些原则。 我想和大多数人一样,我已经开始创建那个基本的CRUD了。 好的。 完成。

现在我想要一个新动作:搜索。 事实证明,它不是7个休息神圣(!)动作之一(如果做对了)。 虽然我知道我可以实现新的自定义操作并为其提供资源,但我会在一些地方阅读,尽可能地坚持使用标准操作。 好的。 什么是正确的方法?

这个人一样的一些消息来源建议考虑我的场景名词 ,在这种情况下我似乎需要一个“搜索”控制器......? 它并没有让我相信我必须创建一个完整的类,而我通常会进行def search以保持它的ResTful。

我弄错了什么? 这里的常见解决方案是什么?

谢谢。

REST是一个概念,而不是宗教:-)。 但核心动词是GET / POST / PUT / DELETE,它们映射到相关的HTTP动词。 URL中的内容通常是对此的反映,并且(这更像是Rails哲学)遵循约定可以使一切变得更加容易。 使用通用轨道(例如脚手架)获得的URL在几个方面并不是特别理想,但它们可以工作,您可以更改它们。

所以,是的,对于搜索(假设它开始简单,例如在单个模型中查找记录,比如说Product )那么你可以使用像这样的查询字符串进行GET

def search
  @results = Product.where("name ILIKE ?", params[:query])
  ...
end

这会导致像/product/search?query="foo"这样的网址 - 没错。

这取决于您的搜索是针对一个资源还是多个资源。 例如,如果您有ProductsController并且只想为您的产品实现搜索功能,则可以创建一个名为“search”的集合操作(​​url将是/ products / search)

如果你的搜索是针对很多资源的,我会创建一个带有单例资源的SearchesController:在我的路径文件中搜索。

然后,当您在应用程序中实现搜索功能时,不要将所有逻辑放在控制器中,而是创建模型类来处理搜索。 您甚至可以创建一个抽象类来映射到您的搜索表单,从而避免使用'* _tag'字段来创建您的搜索表单。

请参阅: https//github.com/slainer68/basic_active_model

如果你想坚持REST(这是一个真正的指南,它有利有弊),那么你链接到的幻灯片共享建议正确的方法来做事。

因此,例如,如果您有一个comments_controller,并且希望能够搜索注释,则可以创建一个comments_search_controller。 搜索表单位于comments_search_controller #new,它将POST到comments_search_controller #create。

是的,你正在用这种方式创建另一个类,但这与在comments_controller中创建另一个动作没什么不同,它确实保持一致和分离。 您不需要新的CommentSearch模型或任何东西,只需要该控制器,它会向您的Comment模型询问相关的搜索结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM