对于普通列,可以通过columns类方法获取它们.但是,如果在relationship方法中设置了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"

Note:根据MCB的答案和下面的 comments ,这个答案已经更新为Rails 4.2.在Rails的早期版本中,使用primary_key_name来访问反射的foreign_key,反射的键可以是符号而不是字符串,这取决于关联的定义方式,例如:comments而不是"comments".

Ruby相关问答推荐

使用 Drive API 创建空文件

Ruby注入daisy链?

减少哈希值

如何以不同 colored颜色 输出我的 ruby​​ 命令行文本

将参数传递给erb视图

差异 - unless/if

在 Ruby 中将数组转换为索引哈希

判断 Ruby HTTP 响应是否成功

格式化 Ruby 的漂亮打印

从 1 开始循环

如何验证 RSpec 中的退出和中止?

从命令行调用 ruby​​ 函数

如何让 Ruby 1.9 成为 Ubuntu 上的默认 Ruby?

在 Ruby 中查找内存泄漏的原因

判断整数是否在范围内

为什么 __FILE__ 大写而 __dir__ 小写?

如何判断数组是否有重复项?

如何在 Capistrano v3 的服务器上运行 shell 命令?

JavaScript Array:获取项目的范围

如何在ruby脚本中隐藏终端的密码输入