根据表单选择验证一个表单字段或另一个表单字段,但不能同时验证两者

时间:2012-11-27 07:25:36

标签: ruby-on-rails

如何仅在选择PAYMENT_TYPE检查时验证检查,并且在选择PAYMENT_TYPE信用卡时仅验证信用卡?

   class Order < ActiveRecord::Base
    attr_accessible :check, :creditcard
    PAYMENT_TYPES = [ "Check", "Credit card" ]
    validates :creditcard, :presence => { :if => :creditcard? }
    validates :check, :presence => { :if => :check? }

     def creditcard?
     check == nil
     end

     def creditcard?
     creditcard == nil
     end
   end

形式

  <%= form_for(@order) do |f| %>

...

    <div class="field">
      <%= f.label :pay_type %><br />
      <%= f.select :pay_type, Order::PAYMENT_TYPES,
      prompt: 'Select a payment method' %>
    </div>
    <div id="creditcard">
      <%= f.label :creditcard, class: "creditcard" %><br />
      <%=  f.text_field :creditcard, class: "creditcard" %>
    </div>
    <div id="check">
      <%= f.label :check, class: "check" %><br />
      <%=  f.text_field :check, class: "check" %>
    </div>

...

1 个答案:

答案 0 :(得分:1)

见下文。您的检查应该在pay_type

  class Order < ActiveRecord::Base
    attr_accessible :check, :creditcard, :pay_type
    PAYMENT_TYPES = [ "Check", "Credit card" ]
    validates :creditcard, :presence => true, :if => :creditcard_selected?
    validates :check, :presence => true, :if => :check_selected?

     def check_selected?
        pay_type == "CHECK"
     end

     def creditcard_selected?
        pay_type == "Credit Card"
     end
  end
相关问题