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

有没有办法通过给定的链接传递 search_name 文本字段的值?

4

2 回答 2

5

如果您尝试将值发布到服务器,您应该使用 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]。希望这可以帮助。快乐编码!

于 2012-06-14T04:12:13.177 回答
1

这可能与Ruby on rails 重复 - 将表单中的 text_field 值传递给不同控制器中操作的参数

但这里有一个答案: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

于 2013-05-16T03:08:03.137 回答