2012-06-21 112 views
2

我有一個簡單的搜索工作在我的Rails應用程序,但它只搜索我的表的一列。我試圖添加一個簡單的下拉菜單,其中包含「last_name」和「city」等選項,以便用戶可以選擇要搜索的列。構建簡單搜索的靜態下拉菜單Rails 3

在我看來,我有:

<%= 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 %> 

,並在我的模型:

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

任何幫助極大的讚賞。

回答

2

您可以添加select_tag爲您的下拉菜單

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

在你的控制器,你可以在PARAMS的值傳遞[:search_from]你的搜索方法。並修改它以包括列名

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

我寫了一個粗糙的方式,但我希望它得到的消息。

+0

我同意你們的做法,但select_tag是有點奇怪......我試圖修復它 – Naveed

+0

是。寫得很快。最後一行提到:)只是想傳達這個想法。 – sohaibbbhatti

+0

@sohaibbbhatti:謝謝我只是在尋找這個..你節省了我的時間。 ;) –

0

你試過:

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

延長@ sohaibs的回答下拉是,如果你只允許用戶與一些一些固定的屬性過濾結果

意見

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

控制器

def search 
    User.search params[:teacher][:search_by],params[:teacher][:search] 
end 
一個好主意

模型

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

真棒Rails的:)

+0

謝謝。這一切都是有道理的,但我得到了「教師#索引中的參數錯誤,錯誤的參數數量(1 for 2)」錯誤消息,我似乎無法解決。這是否失去了某個地方的爭論? – awking