2012-06-07 39 views
1
<%= text_field_tag 'search_name', :class => 'search_save' %> 
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %> 

是否有任何方法將search_name文本字段的值與給定鏈接一起傳遞?將text_field的值傳遞給link_to

+0

@some_value是Hash.So我想我不能用$。員額(URL,{} PARAMS像method.I必須使用的link_to。 – shajin

+1

我認爲你可以使用「提交」而不是「link_to」作爲「保存搜索」,這會提交你的表單參數,然後你可以爲你的主要提交添加另一個提交,併發送到適當的動作 – cdesrosiers

+0

@cdesrosiers但是我不知道'想要使用窗體.. – shajin

回答

3

如果您嘗試將值發佈到服務器,您應該使用HTML表單。這就是他們所設計的。實際上,當您指定:method => :post作爲link_to助手的選項時,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]訪問此數據。希望這可以幫助。快樂的編碼!

+1

此答案使用'form_tag'和'submit_tag'問題如何使用'text_field_tag'和'link_to'。這是導入,因爲有些時候已經有一個表單,表單不能嵌套。 – 23inhouse

0

這可能與Ruby on rails - Pass text_field's value in form to a parameter for an action in a different controller

重複但這裏是一個答案:http://railspikes.com/2007/4/17/partial_dom_submit_with_link_to_remote

它可能需要修改軌道的新版本。 :submit選項似乎沒有更多。如果鏈接轉到GET操作,則可以使用javascript更改事件來更改鏈接上的href。我確信有一種方法可以通過POST操作來實現。

而且我用這個頁面得到它的工作:https://makandracards.com/makandra/1383-rails-3-make-link_to-remote-true-replace-html-elements-with-jquery