2013-03-14 63 views
7

我是Ruby on Rails的新手,我創建了我的第一個站點。我有一個3列用戶模型:firstname,lastnameemail。即時通訊使用搜索引擎做搜索引擎,我想有一個搜索字段,將通過每一列,並顯示結果。Ransack,搜索多列,一個字段,導軌3

我已經做了user_controller.rb看起來像這樣:

@q = User.search(params[:q]) 
@users = @q.result(:distinct => true) 

而且我用戶\ index.html.erb看起來是這樣的:

<%= search_form_for @search do |f| %> 
    <div class="field"> 
    <%= f.label :firstname_cont , "Firstname" %> 
    <%= f.text_field :firstname_cont %> 
    <%= f.label :lastname_cont , "Lastname" %> 
    <%= f.text_field :lastname_cont %> 
    <%= f.label :email_cont , "Email" %> 
    <%= f.text_field :email_cont %> 
    </div> 
    <div class="actions"><%= f.submit "Search" %></div> 
<% end %> 

給予我3搜索字段,但我只想要一個通過名字,姓氏和電子郵件。

編輯1: 經過多次測試後,我發現搜索字段不能同時處理名字和姓氏,或任何空格。我讀過,有可能做一個這樣的helper_method: Searching multiple fields with Ransack

而當我得到的搜索結果,我被扔進我的模型索引等:user/index。我可以在哪裏改變這個?

但是,如何在視圖中使用它沒有任何意義。爲什麼這麼難以控制,這就是你要做的:在控制器中這樣做 - >在模型中做這個 - >在視圖中做這個 - >並且不要忘記修復這樣的路線 - >

回答

16

所有,在詢問嘗試通過gem文檔搜索一下並搜索google^_ ^。

第一種指的是GitHub的頁面:https://github.com/ernie/ransack

望着的演示頁洗劫的位置:http://ransack-demo.herokuapp.com/你應該看到的第一場你想要做什麼(以姓氏和firsname在兩個搜索)且看看網頁的源代碼,你應該會看到這一行

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" /> 

,讓你在正確的謂詞的想法來使用,你也可以讓他們的名單在這裏:https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb(總是在github上的gem doc中)。

基於

上,你可以做這樣的事情在你看來

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %> 

產生一個「OR條件」查詢,你可以在演示頁面再次看到(其中生成的查詢dispayed作爲傳統的SQL查詢)

希望這有助於

乾杯

+1

尼斯,這工作就像一個魅力!我瞎了眼,但我現在明白了答案就在我面前。謝謝! – 2013-03-20 12:02:18

+1

很高興能幫到我^ _^ – phron 2013-03-21 07:17:58

+0

我可以問你一些更多的幫助嗎?我注意到空格或搜索多於1個單詞會導致此方法失敗。就像firstname是Foo,lastname是Bar,並且我搜索Foo吧,它會失敗..是否可以構建一個:def set_full_name .... end,然後在視圖中調用它?你如何在視圖中調用它?與helper_method?我dident設法做到這一點。還有最後一件事,如果我有搜索任何其他地方,我的結果總是會把我扔到模型索引。爲什麼是這樣? – 2013-04-04 12:33:14