【问题标题】:Rails - change form action based on radio selectionRails - 基于无线电选择更改表单操作
【发布时间】:2012-10-31 22:57:09
【问题描述】:

我是 Rails 菜鸟。我不会撒谎的。我的任务是采用两种形式并将它们变成一种动态形式。这是一个登录/注册表格。我唯一的问题是如何处理代码的 Rails 部分。使用 jQuery,我可以轻松替换 HTML 表单操作,但我将如何根据登录或注册单选选择替换 Rails 代码中的操作/目标。

<%= form_tag login_path, :id => '_login_form' do %>
<% end %>

<%= form_tag sign_up_path, :id => '_sign_up_form' do %>
<% end %>

【问题讨论】:

    标签: jquery ruby-on-rails-3 forms radio-button


    【解决方案1】:

    我看到了两种解决您问题的方法。

    使用 javascript,您可以根据选择的单选按钮更改表单的操作。

    $("#radio").change(function() {
      var action = $(this).val() == "some_value" ? "login" : "sign_up";
      $("#your-form").attr("action", "/" + action);
    });
    

    或者您可以在一个操作中处理这两种方法并分别处理每个选项

    #view
    <p> <%= radio_button_tag :option, "login" %> Orange </p>
    <p> <%= radio_button_tag  :option, "sign_up" %> Peach </p>
    
    #controller
    if params[:option] == "login"
      #do login
    elsif params[:option] == "sign_up"
      #do sign up
    end
    

    我希望这会有所帮助!

    【讨论】:

    • :option 是如何进入控制器的?
    【解决方案2】:

    如果对象只使用一个表单,但要让不同的提交按钮转到不同的表单操作,那么这似乎是提交输入上 formaction 属性的完美用例。

    MDN

    请注意,formmethod 是另一个属性,如果您只想更改方法。

    以下是您可能会做什么的想法:

      <%= submit_tag('Sign Up', formaction: 'user#create', formmethod: 'POST') %>
    
      <%= submit_tag('Log In', formaction: 'user#login', formmethod: 'POST') %>
    

    这些表单* 属性中的任何一个都优先于表单操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多