Benutzerdefinierte Active Admin-Formular-Eingänge für has_and_belongs_to_many Beziehung
Habe ich ein sehr einfaches Modell
class Lifestyle < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :profiles
end
dass eine has_and_belongs_to_many
Beziehung mit Profile
class Profile < ActiveRecord::Base
attr_accessible ...
belongs_to :occupation
has_and_belongs_to_many :lifestyles
accepts_nested_attributes_for :lifestyles
end
Möchte ich ActiveAdmin zu Bearbeiten das Profil-Objekt, sondern auch zuweisen Lebensstile zu einem Profil. Es sollte so ähnlich wie der Umgang mit belongs_to :occupation
, da diese automatisch aussortiert, die von ActiveAdmin zu einer dropbox mit den Optionen vor-gefüllt mit den verfügbaren berufen.
Habe ich versucht, den has_many
Formular-generator-Methode, aber nur, hab mir in einem Formular anzeigen zu können, geben Sie den Namen des Lifestyle-und Unterordnung, es gab einen Fehler zurück.
f.object.lifestyles.build
f.has_many :lifestyles do |l|
l.input :name
end
Fehler bekomme ich:
Can't mass-assign protected attributes: lifestyles_attributes
Der perfekte Weg für mich wäre, zu bauen, mehrere Checkboxen, eine für jeden Lebensstil in der DB. Ausgewählt bedeutet, dass der lebensstil verbunden ist, um das Profil, die anderen Mittel, um die Beziehung löschen.
Ich habe große Zweifel, dass dies möglich ist, mit ActiveAdmin und ohne das erstellen sehr komplexe Logik, um sich mit diesem. Ich würde wirklich schätzen, es wenn Sie möchten, geben Sie Ihre Meinung und mir raten, wenn ich diesen Weg gehen oder es anders Herangehen.
InformationsquelleAutor Cristian | 2012-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einigen Recherchen, bin ich bereit, die Antwort auf meine eigene Frage.
Ersten, ich muss sagen, Dank @Lichtamberg für die Annahme, das zu beheben. Jedoch, dass nur die Dinge verkompliziert (auch in Bezug auf Sicherheit ist jedoch kein Problem, in diesem Fall), und hilft mir nicht meine ideale Lösung.
Graben mehr, fand ich heraus, dass dies ein sehr häufiges Szenario in Schienen, und es ist tatsächlich erklärt, in Ryan Bates' screencast nicht von #17.
Daher in Schienen, wenn Sie eine has_and_belongs_to_many (Kurzform HABTM) Verein, Sie können ganz einfach die ids der anderen verbunden-Objekt über diese Methode:
Und dies offensichtlich funktioniert für Formen, wenn Sie sich gesetzt haben, die attr_accessible für lifestyle_ids:
In ActiveAdmin, denn es nutzt Formtastic, können Sie diese Methode verwenden, um die Ausgabe der richtigen Felder (in diesem Fall Ankreuzfelder):
Außerdem habe ich vereinfachte meine form anzeigen, so ist es nun nur diese:
Ok, jetzt wird diese gerendert perfekt im Blick, aber wenn ich versuchen und meine änderungen, es gibt mir diese Datenbank-Fehler:
Fand ich heraus, dass dies aufgrund der Tatsache, dass Rails 3.2 werden nicht automatisch aktualisiert den Zeitstempel für eine HABTM-association table (weil Sie die extra-Attribute und Schienen behandelt nur den
_id
Attribute.Gibt es 2 Lösungen dieses Problem zu beheben:
has_many, :through =>
)Ich bin zu gehen für 2), da werde ich nie brauchen die Zeitstempel oder eine zusätzliche Attribute.
Ich hoffe, dies hilft anderen Menschen mit den gleichen Problemen.
Edit: @cdesrosiers war am nächsten an der Lösung, aber ich schrieb ja schon, dass diese Antwort, bevor ich zu Lesen sein. Eh, das ist toll trotzdem. Ich bin eine Menge zu lernen.
Interessant, dass ich nicht haben, um geben Sie die
collection
manuell (activeadmin 0.5.1, formtastic 2.2.1). Tolle Antwort sowieso!InformationsquelleAutor Cristian
Aktiven Admin erstellt eine dünne DSL (Domain-Specific Language) über formtastic, so ist es am besten zu schauen, die formastic doc, wenn Sie benötigen Formular-Anpassungen. Dort werden Sie feststellen, dass Sie vielleicht in der Lage sein zu verwenden
f.input :lifestyles, :as => :check_boxes
zu ändernhas_and_belongs_to_many
Beziehung.Ich sage "möglicherweise" deshalb, weil ich habe nicht versucht, diese Helfer selber für Ihren speziellen Fall, aber diese Dinge haben eine Tendenz zu arbeiten, nur automatisch, so probieren Sie es aus.
Auch, Sie werden wahrscheinlich nicht brauchen
accepts_nested_attributes_for :lifestyles
es sei denn, Sie wirklich wollen, zu ändern ändern Sie die Attributelifestyles
ausprofiles
, was ich nicht glaube, ist besonders nützlich bei der Verwendung von aktiven admin (ändern Sie einfachlifestyles
direkt).InformationsquelleAutor cdesrosiers
Hinzufügen
f.e.:
InformationsquelleAutor BvuRVKyUVlViVIc7