太阳黑子:在哪里放我的Model.search代码?

时间:2011-11-13 05:39:52

标签: ruby-on-rails ruby-on-rails-3 decorator code-organization sunspot

我将用户模型定义为可搜索:

class User < ActiveRecord:Base
    searchable do
        #...
    end
end

现在,我想知道实际搜索电话的最佳位置是什么:

User.search do
    keywords kw
    # insert a toooon of with, facets etc...
end

我不想在控制器中有这么大的块。 我正在使用draper(实现装饰器模式),但它真的耦合到模型,所以我认为它不是最好的地方。或者是吗?

我应该只创建一个Search类并执行类似

的操作
@search = Search::UserSearch(params)

在控制器中?

谢谢!

2 个答案:

答案 0 :(得分:3)

我建议你把它放在Search :: UserSearch类中。将问题分开并遵循单一责任原则总是一个好主意。

您可以将此课程置于

  

应用程序/模型/搜索/ user_search.rb

(不要忘记将搜索目录添加到自动加载路径)

尽管如此,我正在我的一个项目中这样做,我很高兴。

答案 1 :(得分:1)

将搜索逻辑放在单独的类中是最好的主意。它遵循瘦的控制器的想法,搜索类将在您的应用程序中重用,并且很容易测试。