Rails nested model validation issue -


i have following recipient model containing validations (just showing first 2 keep simple):

 class recipient < activerecord::base   belongs_to :offer   belongs_to :offer_acceptance   validates :name, presence: true   validates :aba_transit_number, presence: true, aba_checksum: true, format: { with: /\a((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})\z/, message: "has invalid format" },  if: "to_usd?"    def belongs_to_offer?     #check if recipient offer     offer_id != nil && offer_acceptance_id == nil   end    def to_usd?     (belongs_to_offer? && offer && offer.currency_to === "usd") || (!belongs_to_offer? &&  offer_acceptance && offer_acceptance.offer.currency_from === "usd")   end ... 

and here offer model

class offer < activerecord::base   has_one :recipient   accepts_nested_attributes_for :recipient   validates_associated :recipient   .... 

as can see, aba_transit_number validation takes place if recipient.offer.currency_to === "usd". validation works fine when create new recipient on console so:

o = offer.create!(currency_to: "usd") r = recipient.create!(offer: o, name:"john") activerecord::recordinvalid: validation failed: aba transit number can't blank, aba transit number has invalid format, ... 

but when try nested form, validation takes place on recipient name validation. figured reason to_usd? returns false because since offer has not been created yet, there no offer_id or offer_acceptance_id.

is there way let recipient model know record being saved offer currency_to set "usd" example? is, can parent attributes passed child model when created in nested form?

i figured out thing needed done add association on offers#create action

@recipient = recipient.new(offer_params[:recipient_attributes]) @recipient.offer = @offer 

Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -