通常の列の場合、columns
クラスメソッドを介して取得できます。ただし、アソシエーションは、foreign_key
オプションが関係メソッドで設定されています。たとえば、
class Post
has_many :comments, :foreign_key => :message_id # this is a contrived example
end
私がした場合Post.column_names
で得ることができましたmessage_id
ですが、comments
を取得する方法はありますか?
Model.reflections
は、モデルの関連付けに関する情報を提供します。これは、関連付け名にキーが付けられたHash
です。例えば.
Post.reflections.keys # => ["comments"]
アクセスに使用できる情報の例を以下に示します。
Post.reflections["comments"].table_name # => "comments"
Post.reflections["comments"].macro # => :has_many
Post.reflections["comments"].foreign_key # => "message_id"
注:この回答は、Rails 4.2に基づいて [〜#〜] mcb [〜#〜] の回答と以下のコメント。以前のバージョンのRailsリフレクションのforeign_key
は、代わりにprimary_key_name
を使用してアクセスされ、キー反射は、関連付けがどのように定義されたかに応じて、文字列ではなくシンボルになる場合があります。たとえば、:comments
ではなく"comments"
です。
Rails 4の将来のGoogle社員の場合、答えは次のようになります:
_Post.reflections[:comments].foreign_key # => "message_id"
_
ここから取得: https://stackoverflow.com/a/15364743/2167965
編集:
reflections
は4.2以降、シンボルではなく文字列を取得するようになりました。これは追跡するのが楽しいバグです。シンボルを使い続けたい場合は、reflect_on_association(:assoc_name)
に切り替える必要があります。また、reflections
は実際には public api であることに注意してください。 Railsが実際に使用している反射が__reflections
_になりました