簡體   English   中英

使用link_to傳遞text_field值

[英]Pass text_field value with link_to

<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %>

有沒有辦法通過給定的鏈接傳遞search_name文本字段的值?

如果您嘗試將值發布到服務器,則應使用HTML表單。 這就是他們的設計目標。 實際上,當您為link_to幫助程序指定:method => :post as on選項時,Rails會動態創建一個HTML表單,該表單會在單擊鏈接時立即發送。 為什么不這樣做呢?

<%= form_tag '/save_search' do -%>
  <%= text_field_tag 'search_name', :class => 'search_save' %>

  <%= submit_tag 'Save search' %>
<% end -%>

這會將值發布到服務器(可在控制器操作中作為params[:search_name]訪問),如果需要。

如果它是一個美學問題(例如,你認為按鈕很丑陋並且想要鏈接)你總是可以將提交按鈕設置為看起來像普通舊CSS的鏈接。 對於用戶來說,它看起來像一個鏈接,但更重要的是,它將像一個按鈕,並提交表單,沒有任何額外的邏輯。

如果您仍然不相信使用表單是一種方法,並且您熱衷於使其工作,那么您可以使用jQuery。 我們來看看你的示例代碼並稍加修改

<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :id => 'save_search' %>

然后在application.js中添加以下內容。

$(function() {
    // Add click event binding to `Save search` link
    $("#save_search").on("click", function(event) {
        event.preventDefault(); // don't trigger default

        // get the value inside the text field
        var name = $("#search_name").val();

        $.post('/save_search', { search_name: name }, function(data) {
            // log the result from the server, or whatever...
            console.log(data);
        });
    });
});

當有人點擊“保存搜索”鏈接並且將使用指定數據向服務器發出AJAX調用時,此事件將被觸發(除非用戶做了類似禁用JavaScript的愚蠢行為)。 控制器操作將能夠通過params[:search_name]訪問此數據。 希望這可以幫助。 快樂的編碼!

這可能與Ruby on rails重復- 將text_field的表格中的值傳遞給不同控制器中的操作的參數

但這里有一個答案: http//railspikes.com/2007/4/17/partial_dom_submit_with_link_to_remote

可能需要針對較新版本的rails進行修改。 :submit選項似乎不再存在了。 如果鏈接轉到GET操作,您可以使用javascript更改事件來更改鏈接上的href 我確信有一種方法可以通過POST操作執行此操作。

我使用此頁面使其正常工作: https//makandracards.com/makandra/1383-rails-3-make-link_to-remote-true-replace-html-elements-with-jquery

暫無
暫無

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

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