0

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

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

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

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

4

4 回答 4

2

假设您的模型名为 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" %>
于 2013-02-19T20:13:49.263 回答
1

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

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

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

于 2013-02-19T19:54:54.780 回答
1

假设当状态改变时不需要发生其他客户端事件,最好将这种业务逻辑作为回调放置在模型中,例如(替换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
于 2013-02-19T20:48:29.627 回答
0

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

于 2013-02-19T19:53:37.040 回答