【Rails】可変でメソッドを取得する【個人的備忘録】

オブジェクトから可変でメソッドを取得する方法のメモ。

実際のコード

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



コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です