Come aggiornare gli attributi più record da caselle di controllo in Rails 3?
-
26-10-2019 - |
Domanda
Ho un attributo per aggiungere una pagina alla navigazione del mio sito (suo un valore booleano) e voglio essere in grado di girare le pagine e lo spegnimento da caselle di controllo tutto in una volta. Ho provato seguendo questo Railscast: http://railscasts.com/episodes/52-update-through-checkboxes ma Im in esecuzione in due problemi.
Una - Voglio le caselle di controllo per mostrare lo stato corrente dell'opzione "barra di navigazione"
.e due -. Non sono sicuro di come aggiornare il campo barra di navigazione
Ecco il mio controller:
def nav
Section.update_all([:navbar => :params[:navbar]], :id =>params[:section_ids])
flash[:success] = "Sections were added to navbar"
redirect_to(admin_sections_path)
end
e la mia vista:
<%= form_tag nav_admin_sections_path, :method => :put do %>
<ol id="section_list" class="records_list">
<% @sections.each do |section| %>
<li id="section_<%= section.id %>">
<table>
<tr class="handle">
<td class="title link_icon directory_link"><%= section.name %></td>
<td class="option"><%= check_box_tag "section_ids[]", section.id %></td>
<td class="action"><%= link_to 'Edit', edit_admin_section_path(section), :class=>"link_icon edit_link" %></td>
<td class="action">
<% if section.has_bio == false %>
<%= link_to 'Destroy', admin_section_path(section), :confirm => 'Are you sure?', :method => :delete, :class=>"link_icon delete_link" %>
<% end %>
</td>
</tr>
</table>
</li>
<% end %>
</ol>
<ol>
<li class="submit">
<%= submit_tag %>
</li>
</ol>
<% end %>
La tabella è annidato nella voce lista a causa di alcune cose ordinabile jquery-ui sto facendo.
In ogni caso ho bisogno che la casella di controllo per mostrare lo stato corrente di: barra di navigazione e ho bisogno di essere in grado di aggiornarli. In questo momento se provo ad aggiornare le ricevo questo errore:
can't convert Symbol into Integer
app/controllers/admin/sections_controller.rb:95:in `[]'
app/controllers/admin/sections_controller.rb:95:in `nav'
su questa linea nel mio controller "
Section.update_all([:navbar => :params[:navbar]], :id =>params[:section_ids])
Quindi credo Im non passa lo stato check_box nel mio controller correttamente.
Soluzione
-
Avere il controllo casella di controllo correttamente . Basta aggiungere il booleano come terzo argomento.
<td class="option"><%= check_box_tag "section_ids[]", section.id, section.navbar %></td>
-
aggiornare il campo barra di navigazione si dovrà impostare entrambe le sezioni in cui barra di navigazione è acceso e spento.
ids = [*params[:section_ids]] + [0] # makes sure it works when no navbars are selected Section.update_all({:navbar => true}, {:id => ids}) Section.update_all({:navbar => false}, "sections.id NOT IN (#{ ids.join(',') })")
Modifica
Bisogni virgolette doppie invece di singole citazioni in secondo update_all. Aggiornato il codice di cui sopra.
EDIT 2
Racchiudere la virgola all'interno del join
tra virgolette