😽
ActiveRecord の属性を別名で扱えるようにする
例えば User モデルに name という属性があった場合に alias_attribute で別名として扱えるようにすることができます。
class User < ActiveRecord::Base
# full_name を name の別名として定義する
alias_attribute :full_name, :name
end
user = User.create(name: "homu", age: 14)
# name ではなくて full_name という別名で参照することができる
pp user.full_name
これだけ見ると Ruby 標準の alias_method のように見えるんですが alias_attribute を利用すると ActiveRecord のいろいろな機能でも参照することができるようになります。
class User < ActiveRecord::Base
alias_attribute :full_name, :name
end
# 作成や更新するときの名前参照ができる
User.create(full_name: "mami", age: 15)
User.create(full_name: "homu", age: 14)
User.create(full_name: "mado", age: 14)
# .where などで使用した場合でも name として参照される
puts User.where(full_name: "homu").order(:full_name).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."name" = 'homu' ORDER BY "users"."name" ASC
これは便利。
Discussion