2016-11-25 64 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

謝謝,我會同時做到這一點 –

相關問題