Rails itself already has an idea of which database columns it considers 
user visible: ActiveRecord.content_columns. As it is, I have a 
different understanding/need of what ought to be visible to the user. 
Specifically, in my opinion, lock_version is nothing a user ever needs 
to see, but on the other hand, columns containing foreign keys contain 
something where the user at least wants to see a derivative. In all,  
nothing a small amount of coding cannot mend.
So here it goes:
  my_content_columns = content_columns + association_columns -
    [ ''lock_version'' ]
  def association_columns
    assocs = reflect_on_all_associations
    return [] unless assocs
    assoc_columns = []
    assocs.each do |assoc|
      next unless assoc.macro == :belongs_to
      name = assoc.options[:foreign_key]
      if name.nil?
        name = Inflector.underscore(
          assoc.options[:class_name] || assoc.name) + ''_id''
      end
      assoc_columns << name
    end
    assoc_columns.map { |ac| columns.find { |c| c.name == ac } }
  end
Well, apparently it works, at least in the cases I''ve thought of. The 
trouble is that I am not sure that I''ve thought of all the relevant 
cases and this kind of code feels awfully brittle. I''d much rather get 
the same result with Rails''s on-board means if they exist.
Michael
-- 
Michael Schuerig                           The more it stays the same,
mailto:michael-q5aiKMLteq4b1SvskN2V4Q@public.gmane.org                       
The less it changes!
http://www.schuerig.de/michael/      --Spinal Tap, The Majesty of Rock