【发布时间】:2014-03-11 21:34:22
【问题描述】:
我有一个显示即将发生的事件的网站。 Event 有一个名为 :approved 的布尔属性。我想显示管理员的所有事件列表和:approved 字段的复选框。如果批准,则应检查它们,否则应取消检查。我猜我需要使用fields_for?当管理员检查表单中的:approved 字段时,我希望它在参数内传输为“1”或“true”或“已检查”,而当他取消选中该字段并提交表单时则相反。我还需要参数列表中每个字段的名称类似于events[event.id],但我出现的是events[event.id][approved],并且我的所有复选框都没有被选中。到目前为止,这是我所拥有的:
admin_index.html.erb
<%= form_tag '/admin_events', method: :get do %>
<table id="admin_events_table" class="table-striped" style="width: 100%">
<thead>
<th>Date</th>
<th>Time</th>
<th>Title</th>
<th>Venue</th>
<th>Visibility</th>
<th></th>
<th></th>
</thead>
<tbody id="admin_events">
<%= render @events %>
</tbody>
</table>
<%= submit_tag "Approve", class: "btn btn-default" %>
<% end %>
_event.html.erb
<tr>
<td><%= fields_for "events[#{event.id}]" do |form| %>
<%= form.check_box :approved %>
<% end %>
</td>
<td><%= event.date.strftime('%A %B %-d') %></td>
<td><%= event.time.strftime('%l:%M %P') %></td>
<td><%= event.title %></td>
<td><%= Venue.find(event.venue_id).name %></td>
<td><%= link_to "Edit", edit_event_path(event) %></td>
<td><%= link_to "Delete", event, method: :delete, data: { confirm: "Are you sure?" } %></td>
更新
这是我在控制器中想出的,以便应用程序将:approved 更新为真或假。不过好像太复杂了:
events_controller.rb
if params[:commit]
ids = params[:events].keys
values = params[:events].values
ids.each_with_index do |id, i|
event = Event.find(id)
if values[i].values[0] == "0"
event.update(approved: false)
else
event.update(approved: true)
end
end
redirect_to admin_events_path
end
【问题讨论】:
标签: ruby-on-rails checkbox fields-for