如何在表格中有多个按钮

时间:2016-02-15 20:41:06

标签: ruby ruby-on-rails-4

目前,我可以选择编辑转到表单,然后选择取消选择“监控有效”状态'选项。状态通过Twitter-Bootstrap标签显示,如status_tag帮助器中所示。 我无法弄清楚如何使标签成为可以在那里改变状态的可点击按钮。

观看代码:

<!-- <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>

助手&#39; status_tag&#39;代码

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

1 个答案:

答案 0 :(得分:0)

如果你没有使用强大的javascript前端,唯一的方法就是使用&#34; Monitoring Active&#34;按钮向rails路由发送请求,导致服务器端的状态发生变化。然后,您的控制器应该重定向到同一页面,但现在site.monitor将具有与以前不同的值。

这不是一种很好的做事方式,因为它需要向rails服务器提供完整的来回请求。通过操作DOM来使用javascript来改变前端的状态将会少得多。您需要记住的是,当您在浏览器中查看您的站点时,该erb ruby​​代码不再存在。它已被编译。在服务之后,您无法预期它会做任何事情。请参阅此内容以了解有关重定向不利于性能的原因:

https://developers.google.com/speed/docs/insights/mobile#AvoidRedirects

但要回答你的问题:

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

<input type="hidden" value="whatever you want to send to your server"/>

只需使用<button>,并为每个文本添加所需的文字。

带有隐藏输入的表单除按钮外不会显示任何内容。将您想要的操作放在action属性中。