Atualizando atributos extras em um has_many,: através do relacionamento usando Rails

Consegui estabelecer um relacionamento muitos para muitos entre os seguintes modelos

PersonagensHabilidadesPlayerSkills

O PlayerSkills, no momento, tem um atributo que as Skills normalmente não possuem: um nível.

Os modelos têm algo parecido com este (editado por questões de concisão):

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

Portanto, nada muito sofisticado nos modelos ... O controlador também é muito básico neste momento ... é praticamente uma ação de atualização de estoque.

O formulário que estou procurando modificar é caracteres # edit. No momento, ele processa uma série de caixas de seleção que adicionam / removem habilidades dos personagens. Isso é ótimo, mas o objetivo principal de usar has_many: through era rastrear um "nível" também.

Aqui está o que eu tenho até agora:

- 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

Depois de renderizar "skill.name", preciso imprimir um campo de texto que atualize o jogador.

O problema, é claro, é que player_skill pode ou não existir! (Dependendo se a caixa já estava marcada quando você carregou o formulário!)

De tudo o que li, has_many: through é ótimo porque permite que você trate o próprio relacionamento como uma entidade ... mas estou completamente sem saber como lidar com a entidade neste formulário.

Como sempre, agradeço antecipadamente por toda e qualquer ajuda que você puder me dar!

questionAnswers(2)

yourAnswerToTheQuestion