awking
awking

Reputation: 25

Build static dropdown menu for simple search Rails 3

I have a simple search working in my rails app, but it only searches a single column of my table. I'm trying to add a simple dropdown menu with options like "last_name" and "city" so the user can select the column to search.

In my view I have:

<%= form_tag teachers_path, :method => 'get', :id => "teachers_search" do %>
<%= hidden_field_tag :direction, params[:direction]%>
<%= hidden_field_tag :sort, params[:sort]%>
  <p>
    <%= text_field_tag :search, params[:search], placeholder: 'First Name' %>
    <%= submit_tag "Search", :first_name => nil %>
  </p>
<% end %>

and in my model:

 def self.search(search)
    if search
      where('first_name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end

Any help greatly appreciated.

Upvotes: 2

Views: 1847

Answers (3)

Naveed
Naveed

Reputation: 11167

extending @sohaibs's answer dropdown is a good idea if you are only allowing user to filter result with some some fixed attributes

views

<%= select_tag "search_by", options_for_select(['first_name','last_name','city'].map{|o| [o.humanize,o] }) %>
<%= f.text_field 'search' %>

controller

def search
  User.search params[:teacher][:search_by],params[:teacher][:search]
end

and model

def self.search(search_by,search_value)
     where('? LIKE ?', search_by, search_value)
end

Awesome Rails :)

Upvotes: 1

sohaibbbhatti
sohaibbbhatti

Reputation: 2682

You can add a select_tag for your drop down menu

<%= select_tag "search_from", "<option>first_name</option><option>last_name</option><option>city_name</option>".html_safe%>

In your controller you can pass the value in params[:search_from] to your search method. and modify it to include the column name

def self.search(search, column_name)
  if search
    where('? LIKE ?', column_name, "%#{search}%")
  else
    scoped
  end
end

I've written it in a crude way but i hope it gets the message along.

Upvotes: 2

Hauleth
Hauleth

Reputation: 23586

Have you tried:

def self.search(column, search)
  # some logic
  where('? LIKE ?', column, "%#{search}%")
  # some logic
end

Upvotes: 0

Related Questions