Rails 3.2.8 и JQuery Tokeninput: Попытка добавить новые записи для отношения has_many через отношение вместо замены всех текущих записей в форме

У меня есть база данных навыков, которые относятся друг к другу как предпосылки друг к другу. В индексе навыков я хотел бы иметь возможность искать другие навыки и добавлять 1 или более в качестве предварительных условий. Важно отметить, что я ТОЛЬКО хочу, чтобы пользователь мог добавлять предварительные условия, а не удалять их, как об этом заботится через систему голосования с понижением. Я использую JQuery Tokeninput и на самом деле все это работает, за исключением одной вещи: я не могу понять, как добавить только предварительные условия вместо замены всех предварительных условий для определенного навыка при отправке.

Модели:

class Skill < ActiveRecord::Base
  attr_accessible :skill_relationship_attributes, :prereq_tokens      

  has_many :skill_relationships
  has_many :prereqs, :through => :skill_relationships
  has_many :inverse_skill_relationships, :class_name => 'SkillRelationship', :foreign_key => "prereq_id"
  has_many :inverse_prereqs, :through => :inverse_skill_relationships, :source => :skill

  attr_reader :prereq_tokens

  accepts_nested_attributes_for :skill_relationships, :allow_destroy => true

  def prereq_tokens=(ids)
    self.prereq_ids = ids.split(",")
  end
end

class SkillRelationship < ActiveRecord::Base
  attr_accessible :skill_id, :prereq_id, :skill_attributes, :prereq_attributes

  belongs_to :skill
  belongs_to :prereq, :class_name => 'Skill'
end

JQuery:

$('#skill_prereq_tokens').tokenInput('/skills.json',
  { theme:'facebook',
    propertyToSearch:'title',
    queryParam:'search',
    preventDuplicates:'true'
  });

Просмотр:

<%= simple_form_for skill do |f| %>
  <%= f.input :prereq_tokens %>
  <%= f.submit %>
<% end %>

1 ответ

Решение

Я чувствую себя немного глупо из-за того, что не получил этого раньше, но я решил свою проблему, изменив то, как prereq_tokens стали prereq_ids в моей модели Skill.

Я просто изменил это:

def prereq_tokens=(ids)
  self.prereq_ids = ids.split(",")
end

к этому:

def prereq_tokens=(ids)
  self.prereq_ids += ids.split(",")
end

Вот и все. Этот маленький знак плюс перед знаком равенства. Я надеюсь, что это поможет любому, кто слишком долго кодирует без перерыва!