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 は書きやすいなぁと感じます。