機略戦記

Maneuver warfare

ActiveRecordで特定のモデルが持つカラム名などをconsoleから確認したくなった時

結論

  • モデルのクラス名を入れてEnter
irb(main):012:0> Message
=> Message(id: integer, body: string, created_at: datetime, updated_at: datetime)

余談

  • どうして見れるんだっけ。
  • 確かこれ#inspectの結果が表示されてるんだよな。
irb(main):013:0> Message.inspect
=> "Message(id: integer, body: string, created_at: datetime, updated_at: datetime)"
  • ActiveRecord#inspectってどこにあるんだっけ。
irb(main):020:0> Message.method(:inspect)
=> #<Method: Class(ActiveRecord::Core::ClassMethods)#inspect>
  • ActiveRecord::Coreってファイルで言うとどれだっけ
irb(main):021:0> Message.method(:inspect).source_location
=> ["/Users/nagai_shinya/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.1.9/lib/active_record/core.rb", 122]

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L217-L231

  • なるほどー
# Returns a string like 'Post(id:integer, title:string, body:text)'
def inspect
  if self == Base
    super
  elsif abstract_class?
    "#{super}(abstract)"
  elsif !connected?
    "#{super} (call '#{super}.connection' to establish a connection)"
  elsif table_exists?
    attr_list = attribute_types.map { |name, type| "#{name}: #{type.type}" } * ', '
    "#{super}(#{attr_list})"
  else
    "#{super}(Table doesn't exist)"
  end
end