我可以在rails 3隐藏字段中添加逻辑吗?

时间:2013-02-19 19:49:30

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

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

<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" %>

答案 1 :(得分:1)

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

让我们说表单会引导您进行创建操作。

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

答案 2 :(得分: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

答案 3 :(得分:0)

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