😽

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

これは便利。

GitHubで編集を提案

Discussion