Ruby on rails контроллеры и виды - PullRequest
0 голосов
/ 11 января 2012

Я новичок в Ruby on Rails и поставил себе небольшой проект, чтобы разобраться с ним.Проект прост, это просто доска объявлений о вакансиях, где человек может опубликовать работу.Я также хочу, чтобы у пользователей был раздел навыков.Я создал пользователя вместе с сессиями, а также создал задания, чтобы пользователь мог опубликовать работу и редактировать только свои собственные действия.Теперь я хочу, чтобы пользователь добавил навыки, связанные с самим собой.Я запутался в том, как я могу достичь этого с точки зрения того, что при просмотре профиля пользователя в представлении пользователя он также отображает их навыки.Я предполагаю, что мне не нужно создавать новый эшафот для навыка и создавать отношения с пользователем has_many ect skill.Это правильно?Также, как я могу получить навыки, которые будут показаны в профиле пользователя.

Любая помощь будет очень признательна.

1 Ответ

1 голос
/ 11 января 2012

Вы определенно на правильном пути.Для этого необходимо настроить модель / каркас 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

Безнеобходимость ссылаться на модель соединения между ними.

...