I think the best solution is to use separate table for storing approvers. You can dynamicly create 'approvers' when you create a document and then change each 'approver' independing of others. A document is approved if it does not have unapproved 'approvers'.
class Approver < ActiveRecord::Base
attr_accessible :approved, role, ...
# where role is manager or someone from HR or ...
# approved is a status (true or false)
belongs_to :document
...
end
class Document < ActiveRecord::Base
has_many :approvers
def approved?
approvers.where(approved: false).empty?
end
....
end