Updating zusätzliche Attribute in einem has_many,: durch Beziehung mit Rails

Ich habe es geschafft, eine Viele-zu-Viele-Beziehung zwischen den folgenden Modellen aufzubauen.

ZeicheKompetenze PlayerSkills

PlayerSkills hat im Moment ein Attribut, das Skills normalerweise nicht haben: ein Level.

Die Modelle sehen ungefähr so aus (aus Gründen der Übersichtlichkeit bearbeitet):

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

Also nichts Besonderes an den Modellen ... Der Controller ist zu diesem Zeitpunkt auch sehr einfach ... es handelt sich so ziemlich um eine Lageraktualisierungsaktion.

Das Formular, das ich ändern möchte, ist Zeichen # bearbeiten. Momentan werden eine Reihe von Kontrollkästchen angezeigt, mit denen den Charakteren Fähigkeiten hinzugefügt bzw. von ihnen entfernt werden. Das ist großartig, aber der springende Punkt bei der Verwendung von has_many: through war, auch ein "Level" zu verfolgen.

Hier ist was ich bisher habe:

- 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

Nach dem Rendern von "skill.name" muss ein Textfeld gedruckt werden, das player_skill aktualisiert.

Das Problem ist natürlich, dass player_skill existieren kann oder nicht! (Abhängig davon, ob das Kästchen beim Laden des Formulars bereits angekreuzt war!)

Von allem, was ich gelesen habe, ist has_many: through großartig, da Sie die Beziehung selbst als Entität behandeln können ... aber ich bin völlig ratlos, wie mit der Entität in dieser Form umgegangen werden soll.

Wie immer, vielen Dank im Voraus für jede Hilfe, die Sie mir geben können!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage