Rails не может найти модель с тем же именем, что и класс Ruby - PullRequest
6 голосов
/ 07 июня 2009

Я довольно новичок в Ruby on Rails, и у меня есть проект с моделью "Set". Это в Rails 2.3.2. Теперь проблема в том, что он не может найти никаких методов в классе этой модели вообще. Например: "неопределенный метод find' for Set:Class" or "undefined method ошибки" для # ". Кажется, я пытаюсь найти эти методы в классе "Set" в Ruby, а не в моём модельном классе.

Это может сработать, если я смогу написать полное имя моего класса модели Set, например Module :: Set, но я не уверен, что это будет. (И да, я действительно хочу, чтобы название моей модели было установлено. Все остальное было бы неудобно в контексте моего приложения).

Есть идеи?

1 Ответ

22 голосов
/ 07 июня 2009

Не называйте это Set. Так лежит безумие.

Дело в том, что определение класса завершается неудачно, потому что вы пытаетесь переопределить 'Set', который уже определен в глобальном контексте.

class Set < ActiveRecord::Base # You are attempting to define a constant 'Set'
                               # here, but you can't because it already exists

Вы можете поместить свой класс в модуль, и тогда вы не получите ошибку, потому что вы будете определять Set в пространстве имен.

module Custom
  class Set < ActiveRecord::Base
  end
end

Однако каждый раз, когда вы хотите использовать свой класс Set, вам придется ссылаться на него как Custom :: Set. Большая магия Rails не сработает, потому что она ожидает, что имена классов будут определены в глобальном контексте. Вы будете собирать плагины и драгоценные камни слева и справа.

Гораздо проще просто дать ему другое имя.

class CustomSet < ActiveRecord::Base

Вся магия работает, и не требуется никаких обезьян.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...