読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

sendメソッドでオブジェクトの付属メソッドを実行できる

Objectクラスに付属しているsendメソッドは、引数に文字列かシンボルを与えてやると同名のメソッドを引っ張り出してくれる凄い子です。

%w(pop push slice).send(:to_s)
#=> "[\"pop\", \"push\", \"slice\"]"

引数つきで実行する事も当然可能です。

%w(pop push slice).each {|i| p %w(a b c d).send(i,1) }

#=> ["d"]
#=> ["a", "b", "c", "d", 1]
#=> "b"

Railsであれば、Helperに

def choose_action(item, key)
     case item.class
       when String
          text_field :fund, key
       when Date
          date_field :fund, key
       when Fixnum
          number_field :fund, key
       else
          text_field :fund, key
     end
end

とやっておいて、Viewの中で

<%= choose_action(@hoge.send(key).class, key) %> | <%= @hoge.send(key) %>

とやっておけば種類に合わせたフォームと記録済みの内容を吐き出す事が出来ます。
コードも短くなるし動的に増減に対応できるしで一石二鳥ですね。