我有一个属性可以将页面添加到我的网站导航中(它是布尔值),我希望能够同时打开和关闭复选框中的页面。我试着遵循这条轨道:http://railscasts.com/episodes/52-update-through-checkboxes但是我遇到了两个问题。
一-我希望复选框显示"导航栏"选项的当前状态。
第二-我不知道如何更新导航栏字段。
这是我的控制器:
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可排序的事情,该表嵌套在列表项中。
无论如何,我需要这个复选框来显示:nawbar的当前状态,并且我需要能够更新它们。现在,如果我试图更新它们,我会得到这个错误:
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状态传递到我的控制器中。
-
正确选中复选框。只需添加布尔值作为第三个参数。
<td class="option"><%= check_box_tag "section_ids[]", section.id, section.navbar %></td>
-
更新导航栏字段您必须设置导航栏打开和关闭的两个部分。
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(',') })")
编辑
第二个update_all中需要双引号而不是单引号。更新了上述代码。
编辑2
在join
内用引号括起逗号