0

次のモデルがあるとします。

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"]
4

3 に答える 3

0

コメントからユーザーにアクセスする方法を探していると思います。

@comment最初のコメントをしましょう:

@comment = Comment.first

作成者にアクセスするには、入力@comment.userする必要があります と If you need the name of that user you would do と入力するだけです@comment.user.name。それはただのOOPです。

そのコメントのIDが必要な場合は、そうします@comment.id

于 2012-06-25T13:13:09.033 に答える
0

あなたが何を達成しようとしているのか、私にはよくわかりません。comment.user.nameポリモーフィック アソシエーションを使用しているようですがhas_many :comments, :as => :authorUserモデル内でアクセスする必要がありますか?

ポリモーフィックな関連付けには、次のものが必要です

class Comment < ActiveRecord::Base
  belongs_to :author, :polymorphic => true
end

また、アクセスしたい場合comment.user.nameは、

class Comment < ActiveRecord::Base
  belongs_to :author, :polymorphic => true
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :comments, :as => :author
  has_many :comments
end

目標をもっと具体的に教えてください。

于 2012-06-25T13:01:28.217 に答える