ruby on rails - pg_search using one text field and one category select-type field -
ruby on rails newbie. i'm trying use pg_search gem running difficulties (yes, looking @ documentation). want search form has both text field , select field (category). here code have far:
contact_info.rb
class contactinfo < activerecord::base ... include pgsearch pg_search_scope :search_by_category, (lambda |category, query| raise argumenterror unless [:prev, :cat].include?(category) { :against => category, :query => query } end end home_controller.rb
class homecontroller < applicationcontroller def index @contact_infos = contactinfo.search_by_category(params[:query]) respond_to |format| format.html # index.html.erb format.json { render json: @contact_infos } end end home\index.html.erb
<%= form_for :search_by_category, :url => {:controller => 'home', :action => 'index'}, :html => {:method => 'get'} |f| %> <%= text_field_tag :query %> <%= f.label :category_id, "category" %> <%= f.collection_select :category_id, category.all, :id, :name, {:prompt => 'all'} %> <br/> <%= f.submit "search" %> <% end %> i'm getting error:
argumenterror in homecontroller#index wrong number of arguments (1 2)
...
request
parameters:
{"utf8"=>"✓","query"=>"test","search_by_category"=>{"category_id"=>"2"},"commit"=>"search"} i understand problem in line:
@contact_infos = contactinfo.search_by_category(params[:query]) but i'm not sure how pass both variables view (home\index.html.erb).
thanks!
ok - figured out. if helps someone....
in model contact_info.rb
class contactinfo < activerecord::base include pgsearch ... pg_search_scope :search_by_category, :against => :previous_value scope :in_category, lambda { |category_id| where(:category_id => category_id) } end in controller home_controller.rb
class homecontroller < applicationcontroller def index if params[:search_by_category].nil? @contact_infos = contactinfo.search(params[:query]) else tmp = params[:search_by_category] @contact_infos = contactinfo.search_by_category(params[:query]).in_category(tmp[:category_id]) respond_to |format| format.html # index.html.erb format.json { render json: @contact_infos } end end end end in view home\index.html.erb
... <%= form_for :search_by_category, :url => {:controller => 'home', :action => 'index'}, :html => {:method => 'get'} |f| %> <%= text_field_tag :query %> <%= f.label :category_id, "category" %> <%= f.collection_select :category_id, category.all, :id, :name, {:prompt => 'all'} %> <br/> <%= f.submit "search" %> <% end %> ...
Comments
Post a Comment