【问题标题】:Submit button with Options带有选项的提交按钮
【发布时间】:2017-05-19 07:17:27
【问题描述】:

对于一个表单,我想要两个提交按钮,命名为:

Appove, Decline

当用户点击Approve 时,它也应该发送approve: true

当用户点击Decline 时,它也应该发送approve: false

基本上按钮应该像复选框一样工作

Rails 可以做到这一点吗?如何实现?谢谢

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-3 ruby-on-rails-4


    【解决方案1】:

    如果您使用标准的submit 表单助手,您将收到一个带有“commit”键的参数。您可以在控制器代码中对此进行测试。

    <%= f.submit 'Approve' %>
    <%= f.submit 'Decline' %>
    

    在控制器中...

    def create
      approved = params[:commit] == 'Approve'
    

    approved 变量将包含 true 或 false,您可以根据需要在操作/方法的其余部分中使用它。

    【讨论】:

    • 这很容易实现,但这是不好的方法。因为它依赖于按钮文本...
    • 您可以更改按钮的 name 值,但挑战是您发现您必须测试是否存在密钥...
    • so params[:approvet]params [:decline] 测试密钥(请记住 params 不是标准哈希,因此测试密钥需要跳过一些小圈' 另一种方法是(如您所说)使用 JS设置一个返回的值。但是params[:commit] 是一种非常常见的技术并且易于实现。如果你做得好,它还支持本地化,所以你可以设置它,这样就不用关心按钮图例是否改变了。跨度>
    • 抱歉忘记给@nautgrad 标上两个cmets
    • 在这种情况下,我们需要从表单接收真/假。我看不出有任何理由用一些逻辑和“检查”来污染控制器。默认情况下,Jquery 已添加到 rails,因此我看不出有任何理由忽略它。但是如果js不是选项,你的答案是可以的。
    【解决方案2】:

    你可以做到,但你需要 js/jquery。您将有隐藏的复选框,您将以正确的方式检查和两个按钮。 让我们假设您的表单具有 id 'form'。你的复选框有 id 'approve_checkbox' 在这种情况下,您需要 submit 函数来完成类似的操作。

    $('#approve_button').on('click', function(e){
      e.preventDefault();
      $('#approve_checkbox').prop('checked', true);
      $('#form').submit();
    });
    
    $('#decline_button').on('click', function(e){
      e.preventDefault();
      $('#approve_checkbox').prop('checked', false);
      $('#form').submit();
    });
    

    当然你可以简化这段代码,但我认为想法很清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2015-05-20
      • 2016-08-30
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多