2016-06-18 3 views
0

У меня есть класс User и подклассы Admin и Student.Создание подклассов с использованием одиночного наследования таблиц (STI)

Студент должен иметь дополнительные выделенные столбцы. Пожалуйста, дайте мне знать, как я могу это сделать, используя STI в Ruby on Rails.

Спасибо!

Также, как заполнить таблицу пользователей?

ответ

1

В 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 знает, как бороться с ИППП

+0

Спасибо, но мой вопрос, как столбцы I, которые являются специфическими для студента (скажем, «класс»)? Кроме того, как мне теперь создать строку для Student и Admin? – user1175969

+0

Я только что обновил ответ, чтобы отразить это – oreoluwa

+0

Спасибо! Возможно ли, чтобы Студент был подклассом Пользователя и имел отдельный столбец, называемый «класс»? Тогда будут ли они иметь одну и ту же таблицу? – user1175969

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