使用link_to传递text_field值

时间:2012-06-07 20:11:03

标签: jquery ruby-on-rails

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

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

2 个答案:

答案 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)

这可能与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

可能需要针对较新版本的rails进行修改。 :submit选项似乎不再存在。如果链接转到GET操作,您可以使用javascript更改事件更改链接上的href。我确信有一种方法可以通过POST操作执行此操作。

我使用此页面使其正常运行:https://makandracards.com/makandra/1383-rails-3-make-link_to-remote-true-replace-html-elements-with-jquery