2016-11-25 30 views
0

我写了下面的代码与曼尼number_field_tag的Rails number_field_tag检查至少一个不为零

<% @monsters.each do |monster| %> 
    <tr> 
    <td><%= number_field_tag "monster[#{monster.id}][quantity]", 0, within: 0...10 %></td> 
    </tr> 
<% end %> 

显示表单如

enter image description here

如何确保至少有一个字段不是零?

Rails是否提供了一些神奇功能?

回答

0

有两方面的验证:直接在JavaScript的前端,或服务器端模型验证。

Rails没有任何JavaScript功能,您必须自行使用JavaScript,例如JavaScript。

<script type='text/javascript'> 
    $('form').submit(function(e) { 
    var foundQuantity = false; 
    $('input[type*=quantity]').each(function() { 
     if ($(this).val() > 0) { foundQuantity = true }; 
    ]); 
    if (!foundQuantity) { 
     e.preventDefault(); 
     // Display some error somewhere 
     $('.error-field').html("<div class='alert'>Please select at least one</div>"); 
    } 
    }); 

对于服务器端:我看到这是一个很多模型的组合形式?你有拥有怪物的父母模型吗?你也可以只在一个模型上使用Rails的验证,而不是在许多模型上。如果存在多个ActiveRecord模型,我会为任何表单构建Form模型,例如:

class MonsterForm 
    include ActiveModel::Model 
    attr_accessor :monsters 
    validate :monster_quantity 

    def monster_quantity 
     if monsters.length == 0 || monsters.none?{|m| m.quantity > 0 } 
     errrors.add(:monsters, "Need to have at least one..." 
     end 
    end 
end 
+0

谢谢,我会同时做到这一点 –

相关问题