В Rails, как правило, у вас будет type
столбец на классе User
. Теперь в ваших подклассах вы бы наследовать от User
класса как таковые:
class User
end
class Admin < User
end
class Student < User
end
Таким образом, вы можете воспользоваться Rails STI и по-прежнему иметь возможность гибко создавать методы для подклассов.
Найти больше информации here
Однако, чтобы держать его немного организованной, вы могли бы поставить подклассы в папку под вашими моделями, как таковой
#models/users/admin.rb
module Users
class Admin < User
end
end
#model/users/student.rb
module Users
class Student < User
end
end
Теперь, чтобы использовать классы, вы бы сделать Users::Student.find(id)
UPDATE
В ответ т o комментарий, я думаю, что для столбцов, которые были бы конкретными для ученика, вам лучше было бы помочь в ассоциации, скажем Student.has_one :grade
или что-то в этом роде, таким образом вы бы успешно абстрагировали свой пользовательский объект, чтобы справиться с общим Методы пользователя. Но чтобы создать строку для Student
и Admin
Вы могли бы сделать Users::Student.create(params)
или Users::Admin.create(params)
и Rails знает, как бороться с ИППП
Спасибо, но мой вопрос, как столбцы I, которые являются специфическими для студента (скажем, «класс»)? Кроме того, как мне теперь создать строку для Student и Admin? – user1175969
Я только что обновил ответ, чтобы отразить это – oreoluwa
Спасибо! Возможно ли, чтобы Студент был подклассом Пользователя и имел отдельный столбец, называемый «класс»? Тогда будут ли они иметь одну и ту же таблицу? – user1175969