簡體   English   中英

以漂亮的方式格式化查詢參數

[英]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部分,以便表單帖子將匹配新命名的路線。

對於這個解決方案,有一些假設:

  • 為應用程序啟用了 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>

現在,當用戶輸入something在搜索字詞字段( #q ),該查詢將如下所示:

GET /admin/users/search/something

這應該只是照顧它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM