Как определить отношения между этими 3 моделями?

У меня есть 3 модели, как это

| User       | Skill       | SubSkills    |
|:-----------|------------:|:------------:|
| Name       |Title        |     Title    |  
| Trade      |Trade        |    Done(bool)|    

Как должны выглядеть модели

class User < ActiveRecord::Base
  has_and_belongs_to_many :skills
end

class Skill < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_many :sub_skills
end

class SubSkills < ActiveRecord::Base
  belongs_to :user #not sure
  belongs_to :skill
end

В основном навыки одинаковы для каждого пользователя одной и той же профессии, и один пользователь имеет много навыков. У каждого навыка есть много субкиллов, но субкилл делается (или нет) для конкретного пользователя.

Это возможно? Какой лучший способ создать эти отношения? Как будут определены маршруты для этого? Например, какой ресурс будет вложен в какой ресурс?

1 ответ

Я думаю, что вы близко, но попробуйте это:

class SubSkills < ActiveRecord::Base
  belongs_to :skill
  has_one :user, through: :skill
end

Маршруты могут быть выполнены несколькими способами: не вложенными, вложенными, неглубокими вложениями... и т. Д. (посмотрите Rails Routing from Outside In, в частности, раздел 2.7.1 Limits to Nesting). Это действительно зависит от потребностей вашего приложения.

Вы могли бы сделать что-то вроде:

/users/:id/skills/:skill_id/sub_skills/:sub_skill_id

..это в вашем routes.rb вам придется:

resources :users do
  resources :skills do
    resources :sub_skills
  end
end

Если вы хотите иметь доступ ко всем sub_skills прямо от пользователя как user.sub_skills а не через определенный навык, такой как user.skills.last.sub_skills Вы должны добавить ассоциацию к User модель как это:

class User < ActiveRecord::Base
  has_and_belongs_to_many :skills
  has_many :sub_skills, through: :skills
end
Другие вопросы по тегам