目前,我可以选择编辑转到表单,然后选择取消选择“监控有效”状态'选项。状态通过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
答案 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
属性中。