validates_acceptance_of not saving to database

validates_acceptance_of is for virtual (non-database-backed) attributes. If you want a database record of the agreement having been accepted, just make legal_agreement a boolean database field and then validate that legal_agreement == 1.

From the Rails API:

Encapsulates the pattern of wanting to validate the acceptance of a terms of service check box (or similar agreement). Example:

class Person < ActiveRecord::Base

validates_acceptance_of :terms_of_service
validates_acceptance_of :eula, :message => "must be abided"

end

The terms_of_service attribute is entirely virtual. No database column is needed. This check is performed only if terms_of_service is not nil and by default on save.