RoR: has_one “или другой”? (Или, полиморфизм без наследования.)

Вы должны определить класс в поле выбора следующим образом:

<%= f.select(:vacancy_type, [ ... ], {}, { class: 'my_style_class' }) %>
8
задан Bill Karwin 16 September 2009 в 01:00
поделиться

2 ответа

Вы пытаетесь смоделировать что-то, что не соответствует парадигме реляционной базы данных. Все ссылки в SQL возникают и одна цель.

FWIW, Полиморфные Ассоциации являются также антишаблоном, потому что он нарушает это правило. Это должна быть подсказка, что это - поврежденный дизайн, когда в документации говорится, что необходимо воздержаться от ограничения ссылочной целостности, чтобы заставить его работать!

Вам нужен Foo, чтобы иметь два has_one отношения: один к Панели и одной Baz. Затем реализуйте некоторую логику класса, чтобы попытаться гарантировать, что только одна ссылка заполняется в любом экземпляре Foo. Таким образом, ссылок на Панель и Baz, нужно иметь значение, и другой должен быть ноль, но это - что-то, чтобы Ваш код проверил на, и осуществить.

8
ответ дан 5 December 2019 в 20:20
поделиться

Возможно, один способ сделать это, должен создать к, имеет ассоциации в Foo, для Панели и Baz. Затем создайте метод, названный присвоением и присвоением =, который может быть единственным способом получить доступ к Панели и Baz. Можно проверить, какой из двух has_ones не является нолем в получить методе, и возвратите тот. В методе присвоения Вы мочь-проверка, что является типом переменной, передала в и установила корректное, имеет отношения к тому объекту и набору другому к нолю. Это должно покрыть все Ваши базы без того, чтобы быть слишком сложным.

0
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: