2015-08-06 2 views
1

У меня есть следующие модели:Должен ли я использовать новое или редактировать действие на модели, которая наследуется от другой модели

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

class Teacher < User 
end 

class Student < User 
end 

Пользователей Вход через форму DEViSE, который создает пользователь. Я хочу иметь два вида профилей, таких как учитель и ученик, хотя они могут быть одновременно и одновременно.

Так что, когда я иду, чтобы создать нового Учителя, я просто собираюсь в teachers/id/edit форме и обновлении учителя, который наследует от пользователя. Должен ли я сделать это, или я могу пойти на teacher/new? и создать учителя оттуда, когда мои модели наследуют, как я?

+0

http://pivotallabs.com/form-backing-objects-for-fun-and- прибыль/ –

+0

usecase не совсем понятна. пожалуйста, уточните меня –

ответ

0

Не используйте наследование здесь. Создание отдельных TeacherProfile и StudentProfile таблицы, и сделать один-к-одному ассоциации:

class TeacherProfile 
    belongs_to :user 
end 

class StudentProfile 
    belongs_to :user 
end 

class TeacherProfile 
    has_one :teacher_profile 
    has_one :user_profile 
end 

Тогда просто следовать стандартному протоколу. Идите прямо к edit, проверьте профили существует, и создать его, если он не делает, что-то вроде этого:

def edit 
    @profile = TeacherProfiler.where(user: current_user).first_or_create 
end 
+0

Мне рекомендовали другие пользователи для использования наследства. Как мне решить? – james

+0

Хе-хе, это твое решение. Вы можете посмотреть похожий вопрос для более подробного ответа/обсуждения: http://stackoverflow.com/questions/32010998/users-attributes-depend-on-users-type-best-way-to-implement-in-rails/32011658? noredirect = 1 # comment51990543_32011658 – EugZol

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