Ссылка светильников из того же типа в Rails - PullRequest
4 голосов
/ 16 февраля 2010

В ассоциациях между различными моделями можно избежать установки идентификаторов внешних ключей напрямую, используя имена приборов, как в этот ответ . Как насчет ассоциативных ссылок, например, при использовании acts_as_tree ? Попытка это:

# categories.yml
forsale:
  name: For Sale
  parent_id: nil

books:
  name: Books
  parent: forsale

Я получаю эту ошибку:

SQLite3::SQLException: table categories has no column named parent: INSERT INTO "categories" ("name", "parent") VALUES ('Books', 'forsale')

Есть ли способ заставить один прибор защищать другой в том же классе без использования явных идентификаторов?

Обновление:

Добавление имени класса в круглых скобках, как для полиморфных принадлежностей_ к , также не работает. Делаем это:

books:
  name: Books
  parent: forsale (Category)

Создает случайное parent_id для books вместо идентификатора forsale.

1 Ответ

3 голосов
/ 16 февраля 2010

Я делал это несколько раз и не могу сказать, почему это не работает для вас. Светильники выглядят правильно, как они есть (без полиморфизма (Category)). Работает ли ассоциация в остальной части вашего приложения? Какую версию Rails вы используете? В вашей Category модели должно быть что-то подобное:

belongs_to :parent, :class_name => "Category"

Если вы хотите заставить его работать, вы можете установить явное значение parent_id, например:

books:
  name: Books
  parent_id: <%= Fixtures.identify :forsale %>

но это явно не идеально ...

...