<%= 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_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %>
有没有办法通过给定的链接传递 search_name 文本字段的值?
如果您尝试将值发布到服务器,您应该使用 HTML 表单。这就是他们的设计目的。实际上,当您:method => :post
为帮助程序指定 as on 选项时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]
。希望这可以帮助。快乐编码!
这可能与Ruby on rails 重复 - 将表单中的 text_field 值传递给不同控制器中操作的参数
但这里有一个答案:http ://railspikes.com/2007/4/17/partial_dom_submit_with_link_to_remote
它可能需要针对较新版本的导轨进行修改。该:submit
选项似乎不再存在。如果链接转到某个GET
操作,您可以使用 javascript 更改事件来更改href
链接上的。我相信也有办法通过POST
操作来做到这一点。