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
CaracteresHabilidadesPlayerSkillsPlayerSkills, 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.