0

У меня есть модель User (используется для аутентификации), которая подключена к двум другим моделям: Customer и Seller через полиморфную ассоциацию в Rails. Клиент и продавец должны иметь разные формы регистрации из-за их разных данных, но могут использовать одну форму для входа, потому что оба они - Users. Для того, чтобы управлять ресурсами клиента и продавца отдельно, рекомендуется ли создавать соответствующие контроллеры и представления для них или управлять всеми пользователями в UsersController?Rails полиморфная ассоциация - контроллеры и представления?

+0

Я думаю, что вместо полиморфной ассоциации вы должны использовать однонаправленное наследование (STI). Клиент и продавец - это тип пользователей. Затем вы можете использовать единую форму для управления входом в систему обоих типов пользователей. –

+0

@madyrockss Я просмотрел однозначное наследование, но решил не принимать его, потому что он включал данные клиента в ту же таблицу, что и данные продавца. Это не имело смысла, потому что у меня так много разных областей. Я думаю, что таблица запуталась бы, и я предпочел бы держать их в отдельных моделях, поэтому я выбрал полиморфную ассоциацию. – user3193550

ответ

0

Как отметил @madyrockss, STI - это, вероятно, путь сюда, потому что User.find (params [: login]) автоматически вернет экземпляр Клиента или Продавца.

Я бы посоветовал забыть о UserController и взглянуть на него и поощрить мышление с точки зрения продавцов и контроллеров/представлений клиентов (то есть не разделяйте один контроллер и представления за действие, которое может обрабатывать как клиента, так и продавца, и имеет условные обозначения в пределах представления, определяющего, что показывать). Если у двух пользователей есть разные бизнес-правила, все это начинает становиться беспорядочным и быстрым и становится громоздким для управления с изменением бизнес-правил.

Для входа/выхода из системы, если форма будет одинаковой для обоих, то будет достаточно одного контроллера, и я бы назвал другое имя, чем UserController, например SessionController, более семантически в соответствии с тем, что Цель контроллера. Вы не ограничены индивидуальными моделями < ==> Контроллеры < ==> Виды, которые многие начинающие разработчики Rails попадают в ловушку.

+0

Да, у меня есть SessionController для управления входами. Но я использую UserController для пользователей CRUD. – user3193550

1

Это зависит от дизайна двух видов клиентов и продавцов. Если конструкция обоих взглядов различны, то я призываю вас, чтобы создать два контроллера 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/действия

Смежные вопросы