Frage

Wie stellen Sie eine benutzerdefinierte ID, wenn eine check_box_tag Helfer in Schienen mit?

Ich habe eine Schleife, die eine Reihe von Kontrollkästchen erstellt basierend auf einer Sammlung:

- subject.syllabus_references.each do |sr|
      = check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
      = label_tag sr.id, sr.name

Ich möchte eine benutzerdefinierte ID einzustellen, so dass mein Label für das Kontrollkästchen korrekt funktioniert, aber ich kann nicht scheinen, um herauszufinden, wie (: id => sr.id nicht funktioniert ...).

Das Problem könnte auch mit der Art und Weise, die ich das Label definiert haben, so dass, wenn ich das bekommen kann die richtige Kontrollkästchen verweisen, ohne eine individuelle ID-Einstellung dann auch, dass wäre schön ...

War es hilfreich?

Lösung

Ich habe dies in meiner Anwendung Checkbox-Tags aus der Sammlung zu erstellen und eine Reihe von ihnen einreichen:

<% @cursos.each do |c| %>
  <span class='select_curso'>
    <%= check_box_tag "vaga[curso_ids][]",
      c.id, (checked = true if form.object.curso_ids.include?(c.id)) %>
    <%= label_tag "vaga[curso_ids][][#{c.id}]", c.nome %>
  </span>
<% end %>

So in params, ich habe ein Array "curso_ids" => [ "1", "3", "5"] anstelle einer Zeichenfolge "curso_ids" => "5 „. Wenn Sie einen einzelnen Wert zurückgeben möchten, verwenden Sie vaga [curso_id] , sonst verwenden vaga [curso_ids] [] ein Array zurück.

Andere Tipps

Wenn Sie das Kontrollkästchen einen zusätzlichen Parameter geben wird es funktionieren:

= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id

@Ganesh, in Ihrer Lösung der resultierende params-Hash hat die folgende Form:

params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}

Diese sollten besser für Sie arbeiten:

check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"

Beachten Sie den dritten Parameter (markiert) wird für diese Arbeit erforderlich. Das resultierende params Array wird

params[:question][:syllabus_reference] = {1, 2, 3, ...}

ich denke, es herausgefunden ...

- subject.syllabus_references.each do |sr|
  = check_box_tag "question[syllabus_reference][#{sr.id}]", sr.id
  = label_tag "question[syllabus_reference][#{sr.id}]", sr.name

Das funktioniert aber, wenn Sie eine bessere Art und Weise haben Sie mich bitte!

Das war sehr hilfreich und brachte meine Tage lange Suche zu Ende. Das meiste, was ich bis jetzt enthalten Syntax und zusätzliche Parameter gefunden würden, die entweder markiert Schienen oder gänzlich ignoriert. Alles, was ich tun möchte, ist ein Array aus meiner Sicht auf mein Controller und Verwendung Kontrollkästchen übergeben Sie die Steuerung, die Array-Elemente Prozess zu erzählen. Ich konnte die oben noch weiter zu reduzieren, zu:

<%= check_box_tag "c[]", c.id %>

wobei c aus meiner Datenbank kommt:

<%= @objects.each do |c| %>

Das ist natürlich übergibt ein Array von Objekt-IDs zu meinem Controller angezeigt werden nur die Einträge überprüft (Einträge standardmäßig deaktiviert sind, da ich die weggelassen: false Parameter, die durch die Art und Weise das gleiche produziert das Ergebnis als . true ), das ist fast alles was ich brauche

Jetzt muß ich in einem Objekttyp Indikatoren nur passieren - auch nur eine Zeichenkette wird gut tun - so dass der Controller weiß, welche Art von Objekt es zu verarbeiten ist, ohne dass ich mein Modell mit einer zusätzlichen Spalte zu erweitern. Ich werde jetzt in auf, dass beginnen und meine Lösung veröffentlichen, aber bitte lassen Sie mich wissen, ob es eine schnelle und einfache Möglichkeit, dies zu tun, wenn Sie bereits kennen.

HAML Probe

Lassen Sie uns sagen Sie ein print Objekt irgendwo mit einem framed Attribut haben, müssen Sie eine Liste von prints angezeigt werden so innerhalb der Schleife erstellen Sie eine benutzerdefinierte row und column mit einzigartigen ID auf jedem checkbox für die Aktualisierung framed

.input.row.collapse
  = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }

Leito,

Sie einfach die Schleife zu schließen, ich gab es auf, einen Objekttyp-Anzeige passieren in durch check_box_tag . Jeder Parameter I auf die in meinem letzten Beitrag über (unter ??) einfach den Checkbox Zustand Standard verursacht wurde Syntax hinzugefügt geprüft statt nicht aktiviert , ohne zusätzliche Datenweitergabe an die Steuerung.

Während auf alternative Lösungen verbleibenden Alarm, wie sie sich präsentieren, für die Zeit, die ich den Objekttyp übernehmen, die in den submit_tag Wert. Dies steht die Funktionalität auf das Display, da die submit_tag Wert ist das, was für den Benutzer auf der Submit-Button angezeigt wird, aber es könnte argumentiert werden, dass diese Kräfte Klarheit in die Ansicht selbst, wie es Begriffsklärung auf die benötigte bietet Controller.

Lernen von Tag zu Tag ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top