Which answers the slightly different question: Does the database sitting under this Model contain a column called "complete"?
The OP asked about an object (and in particular and ActiveRecord object), so respond_to? is probably a more apropos answer. ActiveRecord overrides respond_to? so that it is true for attributes which may actually be handled by method_missing when actually called.
Consider if the OP had: class Article def complete read_attribute(:finished) end end
In that case, Article.column_names.include?("complete") == false even though Article.new.respond_to?("complete") == true
-Rob
Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com