| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby On Rails > acl9. Как расширить поля? |
| Автор: dEEp 30.3.2010, 18:13 | ||||||
| Использую acl9. Необходимо при регистрации пользователя использовать не только дефолтные поля, но и свои. форма содержит поля: имя, пароль, подтверждение и ящик. но я добавил ещё и тип пользователя. Почему у меня тогда при сохранении в type - лежит null? миграция выглядит так:
В контроллере ничего интересного:
ну и модель:
|
| Автор: shine 30.3.2010, 19:32 |
| type - это волшебное название поля в таблице для Rails. Сам фреймворк использует его в своем механизме STI. Поэтому переименуй поле и полегчает. Кстати, можешь посмтореть на STI: может это именно то, что ты пытаешься реализовать. |
| Автор: dEEp 30.3.2010, 20:53 |
| Переименование помогло. Спасибо. Добавлено через 3 минуты я не знаю что такое STI, то почитаю. а пытаюсь организовать различные типы пользователей. т.е. для разных типов пользователей разные формы регистрации |
| Автор: рельсовик 3.4.2010, 10:54 | ||
В таком случае, тебе возможно STI с type и надо, но нет ничего старшного в использовании null для обозначения "абстрактного" или "обычного" пользователя. STI работает так: к примеру ты хочешь реализовать обычных пользователей и админов. Делаешь модель User и соответствующую миграцию с полем type, который будет nullом. Затем есть два варианта, в завимимости от требований: 1. Пишешь все нужные методы для обычного юзера в модели User. Затем делаешь модель AdminUser < User, и дописываешь нужный функционал в эту модель. Хинт: если назовешь два метода в User и AdminUser одинакого, то метод будет исполнятся тот, что в модели юзера, на котором он исполнятся. В миграции ничего не трогаешь. А затем можно создавать новых админов путем u = AdminUser.new, или же u = User.new; u.type = AdminUser; (последний метод годится для изменений существующих юзеров). В обоих случаях админы будут сохранятся в ту же таблицу users, но с типом = AdminUser. Вот и вся магия =) 2. Оставляешь юзера абстрактным и пишешь туда только те атрибуты и методы, которые одинаковые для всех юзеров. Создаешь две модели: RegularUser и AdminUser, и пишешь везде свои методы. А дальше - как в варианте 1. Вариант 2 предпочтительней когда разных юзеров много, или же есть юзеры у которых меньше прав чем у "обычных" юзеров (GuestUser, например), поскольку безопасность всегда лучше внедрять путем давания прав по необходимости, а не лишения их. |
| Автор: dEEp 3.4.2010, 17:52 |
| понял. спасибо. надо подумать, подходит ли мне это. Добавлено через 1 минуту и 4 секунды дайте пожалуйста обоим ребятам плюсы, а то я не могу, а они заслужили. |