【问题标题】:Can I add logic to a rails 3 hidden field?我可以向 rails 3 隐藏字段添加逻辑吗?
【发布时间】:2013-02-19 19:49:30
【问题描述】:

我有一个表单来提交数据,我想根据是否填写所有其他字段来自动设置一个字段。如果它们都完成了,则该字段将为“完成”,否则将设置为“草稿”。

所以我有这样的隐藏字段:

<%= f.hidden_field :status, :value => "draft" %>

使其默认为草稿。但是,我是否可以添加逻辑,说明如果所有其他字段都已填写,它将是“完整的”,如果是这样,如何填写?

【问题讨论】:

    标签: ruby-on-rails-3 logic hidden-field


    【解决方案1】:

    假设您的模型名为 foo,以下是使用 jquery 在客户端执行此操作的方法:

    <script type='text/javascript'>
      $(document).ready(function() {
        $('input[name*="otherfields"]').on('change', function() {
          var othercount = 0;
          $('input[name*="otherfields"]').each(function() {
            if ( $(this).is(':checked') )
              othercount += 1;
          });
          if ( othercount == 2 ) 
            $('#foo_status').attr('checked',true)
          else
            $('#foo_status').attr('checked',false)
        });
      });
    </script>
    
    <%= check_box_tag :item1 , '1', false, :name=>'otherfields[1]' %>    
    <%= check_box_tag :item2 , '2', false, :name=>'otherfields[2]' %>
    <%= f.hidden_field :status, :value => "draft" %>
    

    【讨论】:

      【解决方案2】:

      假设当状态发生变化时不需要发生其他客户端事件,最好将这种业务逻辑作为回调放置在模型中,例如(将 Foofieldx 替换为您的模型和字段名称):

      class Foo < ActiveRecord::Base
      
        before_save :default_status
      
        def default_status
          if field1 && field2 && field3 && field4
            self.status = 'completed'
          else
             self.status = 'draft'
          end
        end
      
      end
      

      【讨论】:

      • 我猜你的意思是模型,但是是的,看起来很棒。谢谢。
      • 也修正了语法,应该是&amp;&amp;而不是||,因为我们希望所有属性都存在而不是任何一个属性。
      【解决方案3】:

      是的,您可以在控制器中执行此操作。

      假设表单将您引导至创建操作。

      在控制器的创建动作中,您可以通过查看params检查所有字段是否完成,然后在保存之前使用if语句为status分配适当的值

      【讨论】:

      • 我同意这应该发生在服务器端。但是,我认为逻辑不属于控制器,在模型中作为回调听起来要好得多。
      【解决方案4】:

      这将使用 javascript 完成,可能是 jQuery。但是,为什么要这样设计呢?你不能在服务器端这样做吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2021-02-08
        • 2023-03-08
        • 2011-03-16
        相关资源
        最近更新 更多