Ruby はそのクラスが持っているメソッドについて訊いてみると教えてくれます
ruby
1user = User.find(1) # => User クラスが代入される (`user.class.name` で確認できる)
2user.methods; User.methods
3# =>
4# !
5# !=
6# !~
7# <=>
8# ==
9# ===
10# =~
11# []
12# []=
13# __binding__
14# ...
クラスメソッド、インスタンスメソッド それぞれ その中を見ていると「attribute_names, column_names」というそれっぽいメソッドを見つけることが出来ます
ズバリそのものな名前の column_names
を使うのが、(じぶんでモデルの機能追加をしたあとでも) 期待通りの動作をしてくれそうです
ruby
1User.find(1).attribute_names # モデルの attribute ≒ カラム名を表示
2# => ["id", "name", "email", "created_at", "updated_at"]
3
4User.column_names
5# => ["id", "name", "email", "created_at", "updated_at"]
モデルが持っているカラム名がわかったので それを値に変換すれば 目的のことができそうです
ruby
1user = User.find(1)
2column_names = User.column_names
3record_values = user.column_names.map { |column_name| user[column_name] }
4# => [1, "John Doe", nil, Mon, 28 May 2018 06:38:22 UTC +00:00, Mon, 28 May 2018 06:38:22 UTC +00:00]
5
6# record から nil を取り除き数を数える
7# (5 カラム - 値のない 1 カラム = 4)
8p record_values.compact.size # => 4
何か参考になれば幸いです
Link
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/28 07:22 編集
退会済みユーザー
2018/05/28 13:59