У меня есть модель User
(используется для аутентификации), которая подключена к двум другим моделям: Customer
и Seller
через полиморфную ассоциацию в Rails. Клиент и продавец должны иметь разные формы регистрации из-за их разных данных, но могут использовать одну форму для входа, потому что оба они - Users
. Для того, чтобы управлять ресурсами клиента и продавца отдельно, рекомендуется ли создавать соответствующие контроллеры и представления для них или управлять всеми пользователями в UsersController
?Rails полиморфная ассоциация - контроллеры и представления?
ответ
Как отметил @madyrockss, STI - это, вероятно, путь сюда, потому что User.find (params [: login]) автоматически вернет экземпляр Клиента или Продавца.
Я бы посоветовал забыть о UserController и взглянуть на него и поощрить мышление с точки зрения продавцов и контроллеров/представлений клиентов (то есть не разделяйте один контроллер и представления за действие, которое может обрабатывать как клиента, так и продавца, и имеет условные обозначения в пределах представления, определяющего, что показывать). Если у двух пользователей есть разные бизнес-правила, все это начинает становиться беспорядочным и быстрым и становится громоздким для управления с изменением бизнес-правил.
Для входа/выхода из системы, если форма будет одинаковой для обоих, то будет достаточно одного контроллера, и я бы назвал другое имя, чем UserController, например SessionController, более семантически в соответствии с тем, что Цель контроллера. Вы не ограничены индивидуальными моделями < ==> Контроллеры < ==> Виды, которые многие начинающие разработчики Rails попадают в ловушку.
Да, у меня есть SessionController для управления входами. Но я использую UserController для пользователей CRUD. – user3193550
Это зависит от дизайна двух видов клиентов и продавцов. Если конструкция обоих взглядов различны, то я призываю вас, чтобы создать два контроллера customers_controller
и sellers_controller
, и вы можете иметь модуль для совместных действий, как lib/authentication.rb
.so
# customers_controller.rb
include Authentication
def some_action
end
и
# sellers_controller.rb
include Authentication
def other_action
end
файл
аутентификации как
# lib/authentication.rb
module Authentication
def common_method
end
end
вы можете иметь два контроллера и один модуль, который вы можете написать общую мето ds/действия
- 1. Rails Обратная полиморфная ассоциация
- 2. Полиморфная ассоциация в Rails 3
- 3. Проблема с Rails Полиморфная ассоциация
- 4. Полиморфная ассоциация Ruby on Rails
- 5. Rails 4 полиморфная ассоциация has_many
- 6. Rails + Thinking-сфинкс полиморфная ассоциация
- 7. Rails полиморфная ассоциация с мангидом
- 8. Полиморфная и has_one ассоциация
- 9. Адрес - Полиморфная ассоциация
- 10. Полиморфная ассоциация в rails4
- 11. Rails, ассоциация, маршруты, контроллеры, суматоха
- 12. Полиморфная ассоциация испортилась?
- 13. Ruby on Rails: множественная полиморфная ассоциация
- 14. Rails полиморфная ассоциация, представляющая существующие модели has_many
- 15. Rails Полиморфная ассоциация с различным поведением
- 16. Rails полиморфная ассоциация не сохранит _type
- 17. Rails - Полиморфная ассоциация для создания различных профилей
- 18. Rails полиморфная ассоциация без типа (уникальный идентификатор)
- 19. Rails, has_many полиморфная ассоциация с одной моделью
- 20. Rails полиморфная ассоциация недоступна в моделях
- 21. Rails 3 полиморфная ассоциация поднимая NameError
- 22. Ruby on Rails - Полиморфная ассоциация со скидками
- 23. Rails полиморфная ассоциация говорит undefined метод
- 24. Полиморфная ассоциация и вложенные атрибуты
- 25. Полиморфная ассоциация paperclip и экономия
- 26. Арел и полиморфная ассоциация присоединяется
- 27. Двойная полиморфная ассоциация
- 28. Полиморфная ассоциация принадлежит пользователю
- 29. has_one полиморфная ассоциация select_box
- 30. Полиморфная ассоциация в Simpleform
Я думаю, что вместо полиморфной ассоциации вы должны использовать однонаправленное наследование (STI). Клиент и продавец - это тип пользователей. Затем вы можете использовать единую форму для управления входом в систему обоих типов пользователей. –
@madyrockss Я просмотрел однозначное наследование, но решил не принимать его, потому что он включал данные клиента в ту же таблицу, что и данные продавца. Это не имело смысла, потому что у меня так много разных областей. Я думаю, что таблица запуталась бы, и я предпочел бы держать их в отдельных моделях, поэтому я выбрал полиморфную ассоциацию. – user3193550