次のモデルがあるとします。
class User < ActiveRecord::Base
has_many :comments, :as => :author
end
class Comment < ActiveRecord::Base
belongs_to :user
end
ユーザーが属性名を持っているとしましょう。Ruby/Rails で、select または where クエリに入力したものと同様に、テーブル名と列を使用してそれにアクセスする方法はありますか? 何かのようなもの:
Comment.includes(:author).first.send("users.name")
# or
Comment.first.send("comments.id")
編集:私が達成しようとしているのは、stringを使用してモデル オブジェクトの属性にアクセスすることです。単純なケースではobject.send attribute_nameを使用できますが、これはComment.author.nameなどの「ネストされた」属性にアクセスする場合には機能しません。
基本的に、ActiveRecord が where() および select() メソッドで使用する SQL に似た構文を使用して、モデル属性を取得したいので、次に例を示します。
c = Comment.first
c.select("users.name") # should return the same as c.author.name
編集2:さらに正確には、次の問題を解決したい:
obj = ANY_MODEL_OBJECT_HERE
# Extract the given columns from the object
columns = ["comments.id", "users.name"]