LoginSignup
2
2

More than 3 years have passed since last update.

変数名に変数を組み込む

Last updated at Posted at 2020-07-01

前提

  • ruby on rails 6.0.0 を使用。

やりたいこと

  • 変数を命名する際に他の変数を組み込む。
  • times文を繰り返す中で、それぞれに数字をつけてtimeの数だけ変数を作りたい。

方法

railsに最初から定義されている instance_variable_set というメソッドを使用する。

instance_variable_set("変数名", 代入したい値)

先につけたい変数名を、後にその変数に代入したい値を記述することで、任意の変数を作ることができる。
イコールで直接変数を作る方が簡単ではあるが、つけたい変数名を""で囲ってあるためにその内部で別の変数を扱うことができるというメリットがある。

movies_controller.rb
def index
  Tag.all.length.times do |num|
    tag_point = 0
    Movie.where(tag_id: num + 1).each do |movie|
      tag_point += movie.evaluation
    end
    instance_variable_set("@tag#{num + 1}_point", tag_point)
  end
end

このようにすることで、タグの数だけ処理を行いそれぞれで tag1_point, tag2_point といった変数を作ることができるようになる。

終わりに

ひとつひとつレコードの数だけ処理を書くのは大変かつ効率が悪いため、 length.times でまとめようとしたところ、イコールで直接変数を作る方法では変数名に変数を含めることができなかった。
このメソッドを使うことで変数の命名がより自由になるので是非覚えておきたい。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2