Validate order lines on order creation (ActiveResource)

Hello,
I have order model that has many lines. I would like to create order
only when all order lines will be created:

require ‘rubygems’
require ‘activeresource’
class PurchaseOrder < ActiveResource::Base
self.site = “http://admin:[email protected]:23456
end
o = PurchaseOrder.create(:account_ref => ‘123’, :lines => [{ :code =>
“111” }, {:code => “222”}])
puts o.inspect

If I add validation that code has to be <200, then the PurchaseOrder
should never be created.

The problem is, I am not aware of the rails way of doing it :slight_smile:

I started directing towards doing custom validation before after_create
with this code:

class PurchaseOrder < ActiveRecord::Base
has_many :purchase_order_lines

attr_accessor :new_lines

def lines=(_lines)
@new_lines ||= []
_lines.each do |_line_params|
puts _line_params.inspect
@new_lines << PurchaseOrderLine.new(_line_params)
end
end

after_create :store_lines

def store_lines
new_lines.each do |line|
line.purchase_order = self
line.save!
end
end
end

However this does not seem elegant. How can I do it, so that the
creation is done in one call and less custom code needs to be written?

Regards,
Tomasz Bak

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs