MENU

Ruby のクラス初期化のときのパラメータを都合よく渡したい

ちょっとしたrubyの自作クラスの時に、インスタンスの初期化で変数を渡したいとき、ActiveRecord っぽくやれるといろいろ手抜きができていいなと思ったので。

目次

スニペット

ActiveRecordとActiveSupportを参考に。

class Person
  # 任意の属性プロパティ
  attr_accessor :name, :job

  def initialize(attributes = nil)
    attributes.each do |k, v|
      send("#{k.to_s}=", v) if respond_to?("#{k.to_s}=")
    end if attributes
    yield self if block_given?
  end
end

new で渡したいだけなのでいろいろ省いて最小限に。

使い方

プロパティを初期化時に渡すのが目的ですので、事前にattr_accessorで必要なものを定義してください。

ハッシュを渡す

Person.new(name: 'わたし', job: '調停官')

ActiveRecord でモデルを new するときと同じです。

ブロックを渡す

Person.new do |h|
  h.name = 'わたし'
  h.job = '調停官'
end

こんな感じでも初期化できます。

ツッコミ大歓迎

Share it!
  • URLをコピーしました!
  • URLをコピーしました!
目次