DBのテーブルに特定のカラムが存在するかどうかをRailsのコードで判定したいケース
ActiveRecord::AttributeMethods
にあるメソッド
二通り存在するが、それぞれインスタンスメソッドとクラスメソッドという違いがある。
(Railsドキュメントではそのへんまでつっこんでいない)
if User.attribute_present?(:name)
change
rename_column :users, :name, :first_name
end
end
なので、↑のコードだとエラーになる。
NoMethodError: undefined method `attribute_present?' for #<Class:0x*****>
上記のようにmigrationで使用したい場合などは当然インスタンス化などしないので、has_attribute?
を使うことになる。
if User.has_attribute?(:name)
change
rename_column :users, :name, :first_name
end
end
こちらは正常に動作する。
以上。