[英]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.