ダメでしょ!

プログラミングとか怒られた話とか…

ActiveRecord から取得した1レコードから配列を作成する

例として、option_mastersというテーブルが存在していた場合

#
# Table name: option_masters
#
#  id                 :integer          not null, primary key
#  option_name        :string
#  option1            :string
#  option2            :string
#  option3            :string
#  option4            :string
#  option5            :string
#  option6            :string
#  option7            :string
#  option8            :string
#  option9            :string
#  option10           :string
#  operator           :string
#  created_at         :datetime         not null
#  updated_at         :datetime         not null
#

このテーブルに登録されているはじめの1レコードを取得し、配列化したい場合は

OptionMaster.first.attributes.values

とすることで取得できます。
これはattributesでレコードをハッシュとして取得することができ、valuesでハッシュの値を配列として取得することができるためです。

今回は更に、テーブルに登録されているはじめの1レコードを取得し、option1~10 を取得したいとなりました。("option_name"や"operator"は値として必要なかった)
その場合、以下のように記載することで、目的を達することができました。

OptionMaster.first.attributes.select { |k, v| k =~ /option\d/ && v.present? }.values

これは、selectで条件に合致したキーの値だけを取得するためにk =~ /option\d/でキーに対して正規表現で記載しています。
更に、値が入っていない場合は必要なかったので、v.present?で除外しています。

まだまだこういったことがすぐにできるほど Ruby のメソッドを知らないので、作業速度が遅いですが、調べるたびに Ruby は書きやすいなぁと感じます。