[英]Format query paramethers in a pretty way
我的 Rails 項目中有一個search
控制器,它響應我的標題中的表單。 現在,一切正常,但是當我搜索“某物”時,我的 URL 中會出現admin/users/search?q=something
。 我試圖使它成為一個更用戶友好的 URL,例如admin/users/search/something
。
我嘗試將我的路線從get 'search' => 'search#index'
更改為get 'search/:q' => 'search#index', :as =>"search
。但是,在我的表單上,它要求我明確將參數設置為類似於form_tag admin_search_path, :enforce_utf8 => false, :method => :GET
不起作用,因為我需要在路徑admin_search_path(something)
前面admin_search_path(something)
括號。
如何為我的應用程序實現“不錯”的搜索 URL?
您可以使用您嘗試過的命名路由,帶有: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
部分,以便表單帖子將匹配新命名的路線。
對於這個解決方案,有一些假設:
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>
現在,當用戶輸入something
在搜索字詞字段( #q
),該查詢將如下所示:
GET /admin/users/search/something
這應該只是照顧它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.