【问题标题】:Rails way to search column names from whole databaseRails 从整个数据库中搜索列名的方法
【发布时间】:2015-10-29 14:42:23
【问题描述】:

Rails 中是否有一种方便的方法可以从整个数据库中搜索特定的列名?

我看过一些关于如何在 SQL 语法中实现这一点的帖子,但在 Rails 中没有显示。 我正在使用带有 MySQL2 gem 的 Rails4。

编辑: 更准确地说,简单的场景:我想知道数据库中是否存在列名。我猜这就像对所有表进行迭代并检查列名是否存在。

【问题讨论】:

  • 我不明白你的意思
  • 什么意思?无论它们在哪个表中,您是否想要所有具有相同名称的列?比如cats.nameusers.name。即使有可能通过一个巨大的 SQL 查询来做到这一点,我也很难想到这样做实际上是有意义的任何场景。
  • 或者您希望表中的每条记录都有一列? SELECT foo FROM bar;
  • 你可以看看你的 db/schema.rb 文件
  • 到目前为止,这是最符合 Rails 方式的答案,但我仍然想知道代码中是否有解决方法:)

标签: mysql sql ruby-on-rails ruby-on-rails-4 mysql2


【解决方案1】:
models = ActiveRecord::Base.connection.tables.collect{|t| t.underscore.singularize.camelize.constantize rescue nil}

然后

columns = models.collect{|m| m.column_names rescue nil}

这一行返回一个包含所有列的数组。您可以从数组中搜索您喜欢的任何列。

【讨论】:

  • 可爱,表名也包括在内。
【解决方案2】:

我认为您正在寻找类似的东西

Rails.application.eager_load! # if cache_classes is off (in dev mode is off by default)
ActiveRecord::Base.descendants.map{|t| t.column_names.map{|cn| t.to_s + ' - ' + cn} rescue []}.flatten.select{|el| el[/search_term/]}

不是有史以来最好的解决方案,但它对我有用

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2019-05-25
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多