Atualizando atributos extras em um has_many,: através do relacionamento usando Rails
Consegui estabelecer um relacionamento muitos para muitos entre os seguintes modelos
PersonagensHabilidadesPlayerSkillsO 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!