Как определить имя таблицы в классе модели Rails 3

17

Я хочу получить имя таблицы в методе модели. Я нашел должен быть метод table_name, но когда я пытаюсь его вызвать, я получаю NameError Exception: неопределенная локальная переменная или метод 'table_name'. Очевидно, это не так:

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

Как получить «реальное» имя таблицы (без меток lowecase - pluralize)?

Спасибо

    
задан lzap 26.05.2011 в 15:53
источник
  • Это метод класса, а не метод экземпляра. Попробуйте имя Model.table_name. –  Mischa 26.05.2011 в 15:56
  • Но мне нужна эта информация в методе экземпляра модели. Как его получить? –  lzap 26.05.2011 в 16:06
  • self.class.table_name, конечно :-) –  lzap 26.05.2011 в 16:11
  • Да, self.class.table_name тоже возможно ... –  Mischa 26.05.2011 в 16:14

3 ответа

25
  

Но мне нужна эта информация в   метод экземпляра модели. Как получить   это?

Вы можете просто сделать это в своем методе экземпляра:

class Model
  def instance_method
    puts Model.table_name
  end
end
    
ответ дан Mischa 26.05.2011 в 16:12
источник
  • Я вижу, но, к сожалению, мой метод экземпляра находится в другом модуле, который включен. Он имеет некоторую общую функциональность, поэтому мне нужно использовать self. Благодаря! –  lzap 26.05.2011 в 16:13
17

Нашел.

Это метод класса. Это не так очевидно из документации Rails 3.

self.class.table_name
    
ответ дан lzap 26.05.2011 в 16:12
источник
  • Кстати, как сделать обратный процесс? Найти имя класса для имени таблицы? –  lzap 26.05.2011 в 16:18
  • table_name.classify.constantize –  Matteo Melani 12.07.2011 в 20:34
0

Если вы используете метод класса для класса, для которого требуется имя таблицы, попробуйте:

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

    
ответ дан erroric 10.06.2014 в 14:50
источник