在Rails中有条件地省略/隐藏按钮

时间:2018-08-07 16:17:06

标签: ruby-on-rails ruby ruby-on-rails-4 form-helpers

我第一次问。我正在实习,所以我不太精通Rails。目前,我正在使用的代码不是我的,它没有自动化测试,也没有任何文档,因此我花了很多时间试图在实际编写一些代码之前了解这些功能的作用。

我的问题:

我要完成的工作是在一组条件下隐藏/省略按钮。

我的研究

已经到处搜索过,但是对我的具体问题没有运气。在以下位置尝试了解决方案:How to disable all form_for input fields in Ruby on Rails app?和此处:In Rails edit action form, hide a form field。另请阅读有关表单助手的Rails文档:https://guides.rubyonrails.org/v4.2.10/form_helpers.html

问题:

有一个称为学校的对象,分为学校和学校小组,理论上有孩子的学校应该是学校小组。我正在尝试为与学校相关联的每个SchoolGroup省略Delete按钮。

如果我这样放就没事

<% if school.children.length < 1 %>
<%= button_to 'Delete', school, :data => {:confirm => 'Are you sure you want to delete this school?'}, :method => :delete, :class=>"btn btn-sm btn-delete" %>
<% end %>

但是如果我这样放

<% if school.children.length > 0 %>

每个按钮都消失了!

因此,我推断每所学校可能都有孩子,即使不应该,而且我需要要求其他条件。还是我应该尝试控制器方式的解决方案?如果可以,该怎么办?

我正在使用ruby 2.2.10和rails 4.2.10。

谢谢大家的时间和任何帮助:)

1 个答案:

答案 0 :(得分:0)

school.children.length返回集合的大小。因此,new个孩子也算在内。

  

length()返回目标上集合调用大小的大小。如果集合已经加载,则长度和大小相等。如果不是这样,无论如何您都将需要记录,此方法将减少一个查询。否则尺寸会更有效。

您可以使用school.children.count对数据库中保留的记录进行计数。此方法调用将触发数据库查询。