我存储搜索历史的简单搜索控制器,我应该使用资源路由还是非资源?

时间:2011-01-14 17:37:33

标签: ruby-on-rails ruby ruby-on-rails-3

我正在学习rails并且正在玩一个简单的网络应用程序,该应用程序与flickr集成以根据用户给定的条件搜索照片并将查询存储在搜索历史记录表中。

我正在寻求最佳或“轨道”处理方式。我应该设置一个控制器和非资源路由来处理搜索并将数据存储在自定义表中;或者我应该为具有资源路径和附加搜索路径的查询创建资源吗?

2 个答案:

答案 0 :(得分:7)

Lemme refactor:

rails g controller searches

这个简洁的规则允许您使用漂亮的每资源操作搜索控制器:

# config/routes.rb
get 'search/:action' => 'searches#:action'

以下是此类的简化版本:

class SearchesController < ApplicationController

  def foos
    search do
      Foo.where :name => params[:q]
    end
  end

  def bars
    search do
      Bar.where :title => params[:q]
    end
  end

  private

  def search(&block)    
    if params[:q]
      @results = yield if block_given?

      respond_to do |format|
        format.html # resources.html.erb
        format.json { render json: @results }
      end
    else
      redirect_to root_url, :notice => 'No search query was specified.'
    end
  end

end

网址查询示例:

/search/foos?q=baz
/search/bars?q=baz

答案 1 :(得分:4)

我的想法:

在config / routes.rb中:

match '/search/:query' => 'search#search', :as => 'search'

创建SearchController

rails generate controller search

在app / controllers / search_controller.rb中:

class SearchController < ApplicationController
  def search
    # Use params[:query] to perform the search
  end
end

例如,对“apples”的查询将显示为:http://example.com/search/apples

您可以使用以下代码生成查询链接:search_path('apples')