Как обновить атрибуты нескольких записей из флажков в Rails 3? - PullRequest
1 голос
/ 11 июня 2011

У меня есть атрибут для добавления страницы в навигацию моего сайта (это логическое значение), и я хочу иметь возможность включать и выключать страницы из флажков одновременно.Я попытался выполнить следующий Railscast: http://railscasts.com/episodes/52-update-through-checkboxes, но у меня две проблемы.

Один - я хочу, чтобы флажки показывали текущее состояние опции "navbar".

и два - я не уверен, как обновить поле navbar.

Вот мой контроллер:

  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

и мой вид:

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

Таблица является вложеннойв элементе списка из-за некоторых сортируемых jquery-ui вещей, которые я делаю.

В любом случае мне нужен этот флажок, чтобы показать текущее состояние: navbar И мне нужно иметь возможность обновлять их.Прямо сейчас, если я пытаюсь обновить их, я получаю эту ошибку:

    can't convert Symbol into Integer
app/controllers/admin/sections_controller.rb:95:in `[]'
app/controllers/admin/sections_controller.rb:95:in `nav'

на этой строке в моем контроллере "

Section.update_all([:navbar => :params[:navbar]], :id =>params[:section_ids])

Так что я предполагаю, что я не передаю состояние check_box в мой контроллерправильно.

1 Ответ

1 голос
/ 11 июня 2011
  1. Установите флажок правильно .Просто добавьте логическое значение в качестве третьего аргумента.

    <td class="option"><%= check_box_tag "section_ids[]", section.id, section.navbar %></td>
    
  2. обновить поле навигационной панели Вам нужно будет установить обе секции, где навигационная панель включена и выключена.

    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(',') })")
    

EDIT

Нужны двойные кавычки вместо одинарных кавычек во втором update_all.Обновлен код выше.

РЕДАКТИРОВАТЬ 2

Заключение запятой в join в кавычки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...