Domanda

Come si imposta un ID personalizzato quando si utilizza un aiutante check_box_tag in Rails?

Ho un ciclo che crea un gruppo di caselle di controllo sulla base di una collezione:

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

Vorrei impostare un ID personalizzato in modo che la mia etichetta per la casella di controllo funziona correttamente, ma io non riesco a capire come (: id => sr.id non funziona ...).

Il problema potrebbe anche essere con il modo in cui ho definito l'etichetta, quindi se posso ottenere che per fare riferimento la casella di controllo corretto senza impostare un ID personalizzato allora che sarebbe bene anche ...

È stato utile?

Soluzione

ho usato questo nella mia applicazione per creare tag checkbox dalla raccolta e presentare una serie di loro:

<% @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 %>

Così in params, ho un array "curso_ids" => [ "1", "3", "5"] invece di una stringa "curso_ids" => "5 ". Se si desidera restituire un singolo valore, l'uso Vaga [curso_id] , altrimenti utilizzare Vaga [curso_ids] [] per restituire una matrice.

Altri suggerimenti

Se si dà la casella di controllo un parametro aggiuntivo che funzionerà:

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

@Ganesh, nella soluzione del risultante params hash ha la seguente forma:

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

Si dovrebbe funzionare meglio per voi:

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

Avviso il terzo parametro (controllato) è richiesto per questo al lavoro. L'array params risultante sarà

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

Think I figured it out ...

- 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

Questo funziona, ma se si dispone di un modo migliore fatemelo sapere!

Questo è stato molto disponibile e ha portato la mia ricerca giorni-lunghi al termine. La maggior parte di quello che avrei trovato fino ad ora sintassi contenuta e parametri aggiuntivi che rotaie o contrassegnati o ignorato del tutto. Tutto quello che voglio fare è passare una matrice da me al mio controller e utilizzare le caselle di controllo per dire al controllore quali elementi di un array a processo. Sono stato in grado di ridurre il sopra ancora di più, a:

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

dove c viene dalla mia base di dati:

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

Questo naturalmente passa una matrice di ID di oggetto per il mio controller appartenenti solo alla voci controllato (le voci sono incontrollato di default da quando ho lasciato il false dei parametri, che tra l'altro produce lo stesso comportare come . true ), che è quasi tutto quello che ho bisogno

Ora ho solo bisogno di passare a un indicatore tipo di oggetto - anche solo una stringa letterale farà bene - in modo che il controllore sa che tipo di oggetto è di processo senza che io debba per aumentare il mio modello con una colonna in più. Comincerò a quel momento e posto la mia soluzione, ma per favore fatemi sapere se c'è un modo semplice e veloce per fare questo se si conosce già.

campione HAML

Diciamo che avere un qualche oggetto print con un attributo framed, è necessario visualizzare un elenco di prints modo all'interno del ciclo verrà creato un row personalizzato e column con ID univoco su ogni checkbox di aggiornamento framed

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

Leito,

Proprio per chiudere il ciclo, ho rinunciato a passare un indicatore del tipo di oggetto attraverso check_box_tag . Ogni parametro I aggiunto alla sintassi mostrata nel mio ultimo post di cui sopra (al di sotto ??) semplicemente causato lo stato di casella di controllo per impostazione predefinita a controllare , piuttosto che incontrollato , senza passare i dati supplementari al controller.

Rimanendo avviso per soluzioni alternative che si presentano, per il momento Incorporo il tipo di oggetto nel submit_tag valore. Questo si lega la funzionalità per la visualizzazione, dal momento che la submit_tag il valore è ciò che è mostrato all'utente sul pulsante di invio, ma si potrebbe sostenere che questo le forze di chiarezza in vista anche in quanto fornisce necessario disambiguazione al controller.

giornata di apprendimento per giorno ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top