您可以使用您曾經嘗試過命名的路由,與:q
參數,並從您的形式,我們將動態替換已輸入的搜索詞的路徑參數。
首先,像通常那樣創建表單,除了指定「查詢」作爲搜索參數。此外,請確保搜索字段字段(#q
)不是具有name
屬性;沒有name
屬性的表單元素沒有得到提交到服務器:
<%= form_tag admin_search_path("query"), :enforce_utf8 => false, :method => :get %>
<input type="text" id="q" placeholder="Enter a search term" />
<input type="submit" value = "Search!" />
<% end %>
一個用戶輸入搜索詞,點擊提交(或按下回車鍵),我們將更換路線的query
部分與實際的搜索條件,以便表單發佈將匹配新的命名路線。
對於這個解決方案,也有做了一些假設:
- jQuery是爲應用程序啓用
- 的
onUserSearchReady
方法(或同等學歷)不存在尚未
鑑於這些假設,您可以將其添加到app/assets/javascripts/user.js
文件中:
function onUserSearchReady() {
$.submit(function(event) {
var form = $("form");
var action = form.attr("action");
var search_terms = form.find("#q").val().trim();
if (search_terms.length > 0) {
var new_action = action.replace(/query/, encodeURIComponent(search_terms));
form.attr("action", new_action);
} else {
event.preventDefault();
}
});
};
然後,在search
看來,這增加了查看源代碼的底部:
<script>
jQuery(document).ready(onUserSearchReady);
// Also register appropriate TurboLinks ready callbacks, if using TurboLinks...
// jQuery(document).on('page:load', onUserSearchReady);
// jQuery(document).on('page:restore', onUserSearchReady);
</script>
現在,當用戶在搜索詞字段(#q
),該查詢將看起來像這樣進入something
:
GET /admin/users/search/something
而這應該只是照顧它。
很好的答案,非常感謝 –