Yshmarov
Yshmarov

Reputation: 3749

rails validate dependent model

There have 2 tables: Orders and Arrivals. There can be many arrivals on an order. I want to validate the creation of arrivals for a specific order.

Orders has fields book_id and quantity:integer

Arrivals has fields order:belongs_to and quantity:integer

Order.rb:

class Order < ActiveRecord::Base
  has_many :arrivals

  def total_arrival_quantity
    arrivals.map(&:quantity).sum
  end

  def order_quantity_minus_arrival_quantity
    quantity - total_arrival_quantity
  end
end

Arrival.rb:

class Arrival < ActiveRecord::Base
  belongs_to :order

  validates :total_arrival_quantity_less_or_equal_to_order_quantity, on: create
  validates :current_arrival_quantity_less_or_equal_to_order_quantity, on: create

  def current_arrival_quantity_less_or_equal_to_order_quantity
    self.quantity <= order.quantity
  end
end

How can I make the two validations work?

Upvotes: 0

Views: 444

Answers (1)

Md. Farhan Memon
Md. Farhan Memon

Reputation: 6121

Something like this should work,

validate :order_quantity, on: :create

private
def order_quantity
  if quantity > order.order_quantity_minus_arrival_quantity
    errors.add(:quantity, 'cannot be greater than ordered quantity.')
  end
end

Upvotes: 1

Related Questions