ruby on rails - How do I remove validation duplication from a model? -


short of extracting shipping , billing addresses address model, how can remove validation duplication?

i want validate billing address if it's not same shipping address. how go extracting module? example helpful never know include in modules, or self refers to.

  validates :shipping_name, :shipping_address1, :shipping_street_number, :shipping_city, presence: true   validates :shipping_state, inclusion: { in: address.states.values }   validates :shipping_post_code, length: { is: 5 }, numericality: { only_integer: true }    validates :billing_name, :billing_address1, :billing_street_number, :billing_city, presence: true, unless: -> { self.bill_to_shipping_address? }   validates :billing_state, inclusion: { in: address.states.values }, unless: -> { self.bill_to_shipping_address? }   validates :billing_post_code, length: { is: 5 }, numericality: { only_integer: true }, unless: -> { self.bill_to_shipping_address? } 

you can make method , pass in bits different between 2 types of addresses. in case, difference prefix word fields , ability pass in options.

module addressvalidator   def validates_address(type, options = {})     validates :"#{type}_name", :"#{type}_address1", :"#{type}_street_number", :"#{type}_city", {presence: true}.merge(options)     validates :"#{type}_state", {inclusion: { in: address.states.values }}.merge(options)     validates :"#{type}_post_code", {length: { is: 5 }, numericality: { only_integer: true }}.merge(options)   end end  class mymodel < activerecord::base   extend addressvalidator   validates_address(:shipping)   validates_address(:billing, unless: -> { self.bill_to_shipping_address? }) end 

Comments

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

Pull out data related to my apps from Android Play Store and iOS App Store -

How can I fetch data from a web server in an android application? -