Actualización de atributos adicionales en un has_many,: a través de la relación usando Rails

He logrado establecer una relación de muchos a muchos entre los siguientes modelos

CaracteresHabilidadesPlayerSkills

PlayerSkills, en este momento, tiene un atributo que las habilidades normalmente no tienen: un nivel.

Los modelos se parecen a esto (editado por concisión):

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

Entonces, nada demasiado elegante en los modelos ... El controlador también es muy básico en este punto ... es más o menos una acción de actualización de stock.

La forma que estoy buscando modificar es la edición de caracteres #. En este momento, muestra una serie de casillas de verificación que agregan / eliminan habilidades de los personajes. Esto es genial, pero el objetivo de usar has_many: through fue también rastrear un "nivel".

Esto es lo que tengo hasta ahora:

- 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

Después de que muestra "skill.name", lo necesito para imprimir un campo de texto que actualice player_skill.

¡El problema, por supuesto, es que player_skill puede o no existir! (¡Dependiendo de si el cuadro ya estaba marcado cuando cargó el formulario!)

De todo lo que he leído, has_many: through es genial porque te permite tratar la relación en sí misma como una entidad ... pero no sé cómo manejar la entidad de esta forma.

Como siempre, gracias de antemano por cualquier ayuda que me puedan brindar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta