4 Stimmen

Verwendung von collection_singular_ids=ids, ohne Speichern in der Datenbank.

In Rails verwende ich die other_ids=[...]-Methode, um Verbindungen in einer has_many :through-Beziehung zuzuweisen. Es funktioniert gut, außer wenn ich die other_ids=[...] nicht in der Datenbank speichern möchte (das Zuweisen mit dieser Methode erfolgt automatisch).

Gibt es eine Möglichkeit, diese Verbindungen nur mit Model.new zuzuweisen? Ein Beispiel dafür ist, wenn ich ein Formular übergebe, das Kontrollkästchen für eine has_many-Beziehung hat. Wenn das Formular nicht gespeichert wird (wenn die Validierung fehlschlägt), werden die ausgewählten Kontrollkästchen zurückgesetzt.

Modell:

class Job < ActiveRecord::Base
  has_many :categories
  attr_accessible :category_ids
end

Ansicht:

select :category_ids, Category.all.collect {|x| [x.name, x.id]}, {}, {:multiple => true}

3voto

Ismael Punkte 16187

Das ist seltsam. Ich meine, ich verstehe, warum es gespeichert wird, weil es eine Beziehung zu anderen Datensätzen ist und nicht zu dem, mit dem du arbeitest, aber es sollte einfach sein, dieses Feature in AR zu implementieren, denke ich.

Auf jeden Fall kannst du etwas Ähnliches wie folgt machen, um das zu umgehen. Verwendung virtueller Attribute

class Bar < ActiveRecord::Base
  after_save :save_foos
  has_many :foos

  attr_accessor :temp_foo_ids # Schlechter Name dafür, aber egal...
  attr_accessible :temp_foo_ids

  def save_foos
    foo_ids = temp_foo_ids  # Es sollte den Datensatz wieder so speichern, oder?
  end
end

Im View würdest du auch das virtuelle Attribut verwenden

select :temp_foo_ids, Foo.all.collect {|x| [x.name, x.id]}, {}, {:multiple => true}

Ich habe nichts davon getestet, aber ich bin zuversichtlich, dass es funktionieren wird ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X