For normal columns, you can get at them via the columns
class method. However, associations may be named something quite different if the foreign_key
option is set in the relationship method. For example, given
class Post has_many :comments, :foreign_key => :message_id # this is a contrived example end
if I did Post.column_names
I could get at message_id
, but is there any way to get comments
?
Model.reflections
gives information about a model's associations. It is a Hash
keyed on the association name. e.g.
Post.reflections.keys # => ["comments"]
Here is an example of some of the information it can be used to access:
Post.reflections["comments"].table_name # => "comments" Post.reflections["comments"].macro # => :has_many Post.reflections["comments"].foreign_key # => "message_id"
Note: this answer has been updated to cover Rails 4.2 based on MCB's answer and the comments below. In earlier versions of Rails the reflection's foreign_key
was accessed using primary_key_name
instead, and the keys for the reflections may be symbols instead of strings depending on how the association was defined e.g. :comments
instead of "comments"
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With