Validate order lines on order creation (ActiveResource)


#1

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:secret@localhost: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