Tricky validation using nested attributes?

I am trying to write a validation for a specific use case
when an admin wants to change a project payment terms, I display a
form listing the existing payment terms for this project in sequence
1 rate: 30% label …
2 rate: 30% label …
3 rate: 40% label …

An admin should be able to add a new payment_term ( add_association
in nested form) or delete an existing one…
but also re-order the sequence… i.e change 1=> 3 and 3 => 1
I am trying to set up a validation, so a seq number cannot be created
twice , but it doesn’t work …

Project
has_many :payment_terms
accepts_nested_attributes_for :payment_terms, :reject_if
=> :all_blank, :allow_destroy => true
attr_accessible :payment_terms_attributes

PaymentTerm
belongs_to :project
attr_accessible :seq, :rate, …

validates :term_seq, :numericality => { :greater_or_equal_to => 0 }
validates :rate, :numericality => { :greater_than =>
0.0, :less_than_or_equal_to => 100.0 }

obviously a :seq attribute should be unique within the scope of the
project, so I tried :
validates :seq, :uniqueness => { :scope => :project_id, :message =>
“Seq.?” }

BUT, updating the payment terms
id: 23 :seq 1 rate: 30%
id: 24 :seq 2 rate: 30%
id: 25 :seq 3 rate: 40%

to ( as an example)
id: 23 :seq 2 rate: 30% <= first record to update
id: 24 :seq 3 rate: 30%
id: 25 :seq 1 rate: 40%

doesn’t work at all… updating id: 23 raises a validation error
as :seq 2 is already existing in record :24
so scoping is not the solution, is this a bad design I could change ?

SOLVED’ I totally forgot to look at the ‘old’ acts_as_a_list , now a
plugin …!