<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %>
有没有办法用给定的链接传递search_name文本字段的值?
答案 0 :(得分:4)
如果您尝试将值发布到服务器,则应使用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 :(得分:0)
但这是一个答案: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