Как определить отношения между этими 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