2017/11/22追記 Rails5からalias_method_chainは非推奨なので Module#prependを使いましょう。 メソッドをオーバーライドしたいけど元のメソッドを残したい時 ActiveSupport の alias_method_chain を使う。 class A def foo "foo" end end class B < A def foo_with_bar "foo bar" end alias_method_chain :foo, :bar end a = A.new p a.foo #=> "foo" b = B.new p b.foo #=> "foo" p b.foo_without_bar #=> "foo bar"
![クラスメソッドを alias_method_chain - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/99d8bfd345d2fb1075d2cffeb77b187aeef7fcd4/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgyJUFGJUUzJTgzJUE5JUUzJTgyJUI5JUUzJTgzJUExJUUzJTgyJUJEJUUzJTgzJTgzJUUzJTgzJTg5JUUzJTgyJTkyJTIwYWxpYXNfbWV0aG9kX2NoYWluJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz04NTY0ZjdiNjUzNzAyM2Q0YmRkNDQzMTUzZjcxYWUxZA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwcmluX211JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz05NGU2OWYzNDZkZGQ5YmIxNThkODI5N2ZiMjNmNWM5MA%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Df6571614cad1f4ce39d4e53fe9f07e53)