オブジェクトから可変でメソッドを取得する方法のメモ。
実際のコード
model\test.rb
class Test < ActiveRecord::Base def read_column(attributes) columns = attributes.split(".") column_name = columns.pop base_model = self # 指定されたメソッド情報を取得 columns.each do |method_name| base_model = base_model.send(method_name) end return base_model.read_attribute(column_name) end end
controller\tests_controller.rb
class TestController < ApplicationController def display p Test.read_column('id') end end
簡単な解説
・read_attributeでmodelから可変のカラムの値を取得できる。
・has_one, has_manyで紐づいている情報も取得できるように、"."で分割し、メソッドを呼び出す処理を追加している。
※参考記事
read_attribute
http://apidock.com/rails/ActiveRecord/AttributeMethods/read_attribute
send (Object)
http://ref.xaio.jp/ruby/classes/object/send