【问题标题】:How to determine table name within a Rails 3 model class如何确定 Rails 3 模型类中的表名
【发布时间】:2011-05-26 13:53:04
【问题描述】:

我想在模型方法中获取表名。我found 应该有方法 table_name 但是当我尝试调用它时,我得到 NameError Exception: undefined local variable or method `table_name'。它显然不存在:

 pp methods.grep(/^ta.*/)
["table_name_prefix?",
 "table_name_suffix?",
 "taint",
 "taguri",
 "taguri=",
 "tainted?",
 "table_name_prefix",
 "table_name_suffix",
 "tap"]

如何获得一个“真实的”表名(没有小写 - 复数技巧)?

谢谢

【问题讨论】:

  • 是类方法,不是实例方法。试试Model.table_name
  • 但是我需要模型的实例方法中的信息。如何获得?
  • self.class.table_name 当然 :-)
  • 是的,self.class.table_name 也是可能的......

标签: ruby ruby-on-rails-3 activerecord


【解决方案1】:

但我需要这些信息 模型的实例方法。怎么获得 是吗?

您可以在您的实例方法中简单地执行此操作:

class Model
  def instance_method
    puts Model.table_name
  end
end

【讨论】:

  • 我看到了,但不幸的是我的实例方法位于包含的不同模块中。它具有一些通用功能,因此我需要使用 self.谢谢!
【解决方案2】:

找到了。

这是一个类方法。它在 Rails 3 文档中并不那么明显。

self.class.table_name

【讨论】:

  • 顺便说一句,逆向过程怎么办?查找表名的类名?
  • table_name.classify.constantize
【解决方案3】:

如果你在你想要表名的类的类方法中,试试:

class Model < ActiveRecord::Base
  def self.class_method
    puts self.table_name
  end
end

如果你尝试使用

self.class.table_name

你会遇到NoMethodError: undefined method 'table_name' for Class:Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2013-09-22
    • 2012-02-25
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多