Вы определенно на правильном пути.Для этого необходимо настроить модель / каркас Skill, чтобы в дополнение к его обычным полям, user_id типа integer.Это для хранения внешнего ключа пользователя, которым навык будет.Затем вы можете настроить модель Skill так, чтобы она ассоциировалась с пользователем.Таким образом, в коде вы можете делать такие вещи, как:
@skill.user
@user.skills
По существу, если у пользователя есть навыки, связанные с ним, относительно легко показать их на /user/1
, например,
<p><%= @user.name %> has the following skills</p>
<ul>
<% @user.skills.each do |skill| %>
<li><%= skill.title %></li>
<% end %>
</ul>
* 1007.* Я просто угадываю имена атрибутов там, но вы поняли идею.
Однако
Честно говоря, я бы на самом деле атаковал эту методологию от многих ко многим.Где у вас есть две отдельные модели, Skill и User.Затем у вас есть один промежуточный объект, называемый SkillsUser (без конечного множественного числа для имени таблицы).Это означает, что вы можете иметь набор сохраненных навыков, таких как.
- Математика
- Вычисление
- Программирование
- Маркетинговые навыки
И затем связать одну запись навыка с несколькими пользователями.
class Skill < ActiveRecord::Base
has_many :skills_users
has_many :users, :through => :skill_users
end
class User < ActiveRecord::Base
has_many :skills_users
has_many :skills, :through => :skill_users
end
class SkillUser < ActiveRecord::Base
belongs_to :skill
belongs_to :user
end
Обе модели, имеющие два объявления has_many, в основном позволяют вам использовать такие вещи, как:
@user.skills
@skill.users
Безнеобходимость ссылаться на модель соединения между ними.