From fce65636f7d1ea4c274e6f08016a00c6d1c4b043 Mon Sep 17 00:00:00 2001 From: Lars Henrik Mai Date: Sat, 10 Oct 2015 09:48:18 +0200 Subject: [PATCH] Make PaperSearch persistent --- app/controllers/search_controller.rb | 20 +++++++++++++++++--- app/models/paper_search.rb | 12 ++++-------- config/routes.rb | 3 ++- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index b5e2b48..36df374 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -7,16 +7,30 @@ end class SearchController < ApplicationController def index - @search_definition = PaperSearch.new(params[:paper_search]) + @search_definition = params[:paper_search].present? ? PaperSearch.new(search_params) : PaperSearch.new @search_definition.sort_by ||= "score" - @response = Paper.search(@search_definition) + execute_search + end + + def show + @search_definition = PaperSearch.find params[:id] + execute_search + render action: "index" + end + + private + + def execute_search + @response = Paper.search(@search_definition.to_definition) @papers = @response.page(params[:page]).results @paper_type_facets = extract_facets('paper_types') @originator_facets = extract_facets('originators') end - private + def search_params + params.require(:paper_search).permit(:query, :paper_type, :originator, :sort_by) + end def extract_facets(name) @response. diff --git a/app/models/paper_search.rb b/app/models/paper_search.rb index 92035ab..1f99a1c 100644 --- a/app/models/paper_search.rb +++ b/app/models/paper_search.rb @@ -1,12 +1,8 @@ -class PaperSearch +class PaperSearch < ActiveRecord::Base - include ActiveModel::Model - - attr_accessor :query, :paper_type, :originator, :sort_by - - def to_hash - options = {paper_type: @paper_type, originator: @originator, sort_by: @sort_by} - PaperSearch.definition(@query, options) + def to_definition + options = {paper_type: paper_type, originator: originator, sort_by: sort_by} + PaperSearch.definition(query, options) end def self.definition(q, options={}) diff --git a/config/routes.rb b/config/routes.rb index bb33723..5cc218c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,8 @@ Rails.application.routes.draw do root to: redirect { |path_params| "/leipzig" } scope ':body' do - get '/' => 'search#index', as: :search + get '/' => 'search#index', as: :search + get '/:id' => 'search#show', as: :saved_search end post '/auth/:provider/callback', to: 'sessions#create'