Ruby on rails 我需要一个存储搜索历史的简单搜索控制器,我应该使用资源路由还是非资源路由?

Ruby on rails 我需要一个存储搜索历史的简单搜索控制器,我应该使用资源路由还是非资源路由?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在学习rails,正在玩一个简单的web应用程序,它与flickr集成,可以根据用户给定的条件搜索照片,并将查询存储在搜索历史表中 我正在寻找处理这个问题的最佳方法。我是否应该设置一个控制器和非资源路由来处理搜索并将数据存储在自定义表中;或者我应该为查询创建一个资源,其中包含一个资源路由和一个额外的搜索路径吗?我的想法: 在config/routes.rb中: match '/search/:query' => 'search#search', :as => 'search' 创建一个Sea

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

我正在寻找处理这个问题的最佳方法。我是否应该设置一个控制器和非资源路由来处理搜索并将数据存储在自定义表中;或者我应该为查询创建一个资源,其中包含一个资源路由和一个额外的搜索路径吗?

我的想法:

在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
class SearchController
例如,“苹果”的查询将显示为:

您可以使用以下命令生成指向查询的链接:
search\u path('apples')

Lemme重构一点:

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