2014-12-29 8 views
0

Итак, я хочу, чтобы моя модель User имела навыки __many. Я хочу, чтобы у вас были две разные категории: умение и умение.Организация базы данных для разделения двух разных типов одной и той же модели

Например, пользователь может добавить навык в свой профиль, который у них есть, например HTML. Они также могут добавить навык в свой профиль, который они хотят изучить, например Ruby on Rails. В своем профиле он будет перечислять свои текущие навыки и разыскиваемые отдельно.

С высокого уровня, как лучше всего это сделать? Я просто хочу, чтобы там была 1 модель умения без дубликатов, но я хочу, чтобы у пользователей была возможность иметь две отдельные группы навыков в базе данных.

ответ

1

Вы можете использовать единую таблицу наследования

class Skill < ActiveRecord::Base 
end 

class WantedSkill < Skill 
    belongs_to :user 
end 

class PossessesSkill < Skill 
    belongs_to :user 
end 

Ваша таблица навыков должна иметь столбец type, где будет сохранен тип умения.

WantedSkill.create(:name => "html") 

Выше сохраняется запись в таблице навыков с типом «WantedSkill». Вы можете получить его

WantedSkill.where(:name => "html").first 

ваши ассоциации пользователей могут быть как

class User < ActiveRecord::Base 
    has_many :wanted_skills 
    has_many :possessed_skills 
end 

Вы можете прочитать документацию here

1

Путь для достижения этой цели, вам нужно два навыка поля, как: wanted_skill и possessed_skill

Так, в Ruby On Rails вы можете иметь много ссылок (с разными названиями) к одной и той же модели, вам нужно только объявить, какой класс соответствует используя class_name в ссылках, например:

class User < ActiveRecord::Base 
    belongs_to :wanted_skill, class_name: 'Skill' 
    belongs_to :possessed_skill, class_name: 'Skill' 
end 
+0

не я хочу сделать has_many: wanted_skill, class_name: 'умение' вместо own_to? – parameter

+0

Да, но 'принадлежит_to' имеет смысл для вашего кода, используя только один навык, который может быть связан с каждым полем, если вам нужно больше одного, вам нужно [отношение много ко многим] (http: // api .rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html) –

+0

Да, я хочу, чтобы у пользователей было много желаемых и обладавших навыками. – parameter