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

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -