support ActiveModel