Обновление дополнительных атрибутов в отношении has_many:: through с использованием Rails
Мне удалось установить отношения многие ко многим между следующими моделями
ПерсонажиНавыкиPlayerSkillsУ PlayerSkills сейчас есть атрибут, которого обычно нет у навыков: уровень.
Модели выглядят примерно так (отредактировано для краткости):
class PlayerSkill < ActiveRecord::Base
belongs_to :character
belongs_to :skill
end
class Skill < ActiveRecord::Base
has_many :player_skills
has_many :characters, :through => :player_skills
attr_accessible :name, :description
end
class Character < ActiveRecord::Base
belongs_to :user
has_many :player_skills
has_many :skills, :through => :player_skills
end
Так что в моделях нет ничего особенного ... Контроллер на этом этапе тоже очень простой ... это в значительной степени стандартное действие по обновлению.
Форма, которую я хочу изменить, это символы # edit. Прямо сейчас он отображает серию флажков, которые добавляют / удаляют навыки персонажей. Это здорово, но весь смысл использования has_many: through заключался также в отслеживании «уровня».
Вот что у меня так далеко:
- form_for @character do |f|
= f.error_messages
%p
= f.label :name
%br
= f.text_field :name
%p
= f.label :race
%br
= f.text_field :race
%p
= f.label :char_class
%br
= f.text_field :char_class
%p
- @skills.each do |skill|
= check_box_tag "character[skill_ids][]", skill.id, @character.skills.include?(skill)
=h skill.name
%br
%p
= f.submit
После рендеринга «skill.name» мне нужно напечатать текстовое поле, которое обновляет player_skill.
Проблема, конечно, в том, что player_skill может существовать или не существовать! (В зависимости от того, был ли флажок уже установлен при загрузке формы!)
Из всего, что я прочитал, has_many: through отлично подходит, потому что позволяет вам рассматривать сами отношения как сущность ... но я совершенно не понимаю, как обращаться с сущностью в этой форме.
Как всегда, заранее спасибо за любую помощь, которую вы можете оказать мне!