Ruby 如何在一个表中有多个按钮

Ruby 如何在一个表中有多个按钮,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,目前,我可以选择编辑转到表单并取消选择“监控活动”选项。状态通过Twitter引导标签显示,如status\u标签helper中所示。 我搞不懂的是如何使标签成为一个可点击的按钮,从而改变那里的状态 查看代码: <!-- <p id="notice"><%= notice %></p> --> <h3>All Sites</h3> <div><%= pluralize(@sites.size, 'sites

目前,我可以选择编辑转到表单并取消选择“监控活动”选项。状态通过Twitter引导标签显示,如
status\u标签
helper中所示。 我搞不懂的是如何使标签成为一个可点击的按钮,从而改变那里的状态

查看代码:

<!-- <p id="notice"><%= notice %></p> -->
<h3>All Sites</h3>
<div><%= pluralize(@sites.size, 'sites') %> found</div>
<table class="table table-striped table-hover">
  <thead>
    <tr>
      <th>#</th>
      <th>Site</th>
      <th>Hostname</th>
      <th>Monitoring Active</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
    <% num = 0 %>
    <% @sites.each do |site| %>
      <tr>
        <td><%= num += 1 %></td>
        <td><%= site.site_name  %></td>
        <td><%= link_to site.host_name, site.host_name, :target => "_blank" %></td>
        <td><%= status_tag(site.monitor) %></td>
        <td><%= link_to("Show", {:controller => :show, :action => 'site', :id => site.id}, class: 'btn btn-primary btn-xs') %></td>
        <td><%= link_to("Edit", {:action => 'edit', :id => site.id}, class: 'btn btn-info btn-xs') %></td>
      </tr>
    <% end %>
  </tbody>
</table>

如果您没有使用健壮的javascript前端,那么唯一的方法就是让“Monitoring Active”(监视活动)按钮向rails路由发送请求,从而导致服务器端的状态更改。然后控制器应重定向到此同一页面,但现在
站点。监视器的值将与以前不同

这不是一种很好的方法,因为它需要向rails服务器发出完整的来回请求。使用javascript通过操作DOM来更改前端的状态所花费的时间要少得多。您需要记住的是,当您在浏览器中查看站点时,erb ruby代码已不存在。它已经被编译过了。你不能指望它在上菜后还能做什么。有关重定向不利于性能的原因的详细信息,请参见此:

但要回答您的问题:

如果你想在你的网站上有多个按钮,只需使用多个表单。您可以使用表单,也可以自己制作表单。在每种形式中,使用:

只需使用带有所需文本的


带有隐藏输入的表单将只显示按钮。将所需的操作放在表单
action
属性中。

要更改状态,需要一些JS来进行AJAX调用,然后根据响应更新标签。另外,
nil
在ruby中是一个错误的值,因此您的
status\u标记
方法的第一行是不必要的,因为它将以同样的方式进行计算。我担心。和单选按钮或勾选框?将编辑掉第一行。谢谢
def status_tag(bool, options = {})
  options[:true_text]   ||= 'Active'
  options[:false_text]  ||= 'Disabled'
  options[:true_label]  ||= 'label-success'
  options[:false_label] ||= 'label-warning'

  if bool
    content_tag(:span, options[:true_text], class: "btn #{options[:true_label]} btn-xs")
  else
    content_tag(:span, options[:false_text], class: "btn #{options[:false_label]} btn-xs")
  end
end