環境
Rails 5.2
Ruby 2.6
Ubuntu 20.4
記事
テーブルのカラム名を引用するとき、Railsのsendメソッドを使うとシンプルに記述することができます。
user_controller.rb
@user = User.all
User.test(@user)
sendメソッドを使わないときの書き方です。全カラムの先頭に、userを付ける必要があります。userの記述が冗長で、カラムの数が多くなる程、煩わしくなってきます。
user.rb
def test(user)
user.each do |user|
ary = []
ary << user.id
ary << user.name
ary << user.addr
puts ary
end
end
処理結果です。
[1, "tan", "米原市"]
[2, "pon", "長浜市"]
[3, "mii", "近江八幡市"]
sendメソッドを使ったときの書き方です。userはsendの先頭に1個つけるだけです。これで冗長さを軽減させることができました。
user.rb
def test(user)
user.each do |user|
ary = ["id", "name", "addr"].map { |var| user.send(var) }
puts ary
end
end
sendを使うとカラムの配列を別メソッドにして、独立して記述することもできます。カラムの数が多い場合、別メソッドにした方が、後からカラムが増えた場合、メンテナンス性が増すかと思います。また、別の処理に流用することもできるといった利点もあります。別の処理に流用できると、カラムが増えた場合、1か所を変更しただけで済むということになります。
user.rb
def attributes
["id", "name", "addr"]
end
def test(user)
user.each do |user|
ary = attributes.map { |var| user.send(var) }
puts ary
end
end