我现在有一张表,显示了用户的一系列属性。这是我的问题。每个人都有能力注册一个小组,但在某些边缘情况下,一个人可以进入桌面而无需注册一个小组。为了使阅读表格的用户清楚起见,我想简单地将未登记的每个人隐藏在表格中。这比我预想的要复杂一点。我会展示一些代码和截图,以便更好地理解。
你可以看到一个人没有任何小组不在桌面上显示。
我试图制作一个方法,并在渲染表的控制器上调用它。人与人是两种不同的模型,与HABTM有关联。我怎么说"如果没有人没有在表格中显示"在红宝石?
def index
@people = Person.order(sort_column => sort_direction)
@groups = Group.all
end
这是制作表格的控制器
<table class="table table-striped">
<thead>
<tr>
<th><%= sortable 'phone_number', 'Phone Number'%></th>
<th><%= sortable 'subscribed', 'Subscribed'%></th>
<th><%= sortable 'city' %></th>
<th><%= sortable 'state' %></th>
<th><%= sortable 'zip' %></th>
<th><%= sortable 'country' %></th>
<th><%= sortable 'created_at', "Joined" %></th>
<th>Groups</th>
</tr>
</thead>
<tbody>
<% @people.each do |person| %>
<tr>
<td><%= person.phone_number %></td>
<td><%= person.subscribed? ? "Yes" : "No" %></td>
<td><%= person.city %></td>
<td><%= person.state %></td>
<td><%= person.zip %></td>
<td><%= person.country %></td>
<td><%= time_ago_in_words person.created_at %> ago</td>
<td><%= person.groups.order(:id).pluck(:name).to_sentence %></td>
</tr>
<% end %>
</tbody>
组模型
class Group < ActiveRecord::Base
has_and_belongs_to_many :people
has_and_belongs_to_many :messages
end
perons模型
class Person < ActiveRecord::Base
has_many :deliveries
has_and_belongs_to_many :groups
答案 0 :(得分:2)
这些选项是O(n ^ 2)并且在内存中占了相当多的位置,所以只要您对此有所了解,这些选项很容易实现:
您有两个选项,一个供您查看:
<% @people.each do |person| %>
<% next if person.groups.blank? %>
<tr>
<td><%= person.phone_number %></td>
<td><%= person.subscribed? ? "Yes" : "No" %></td>
<td><%= person.city %></td>
<td><%= person.state %></td>
<td><%= person.zip %></td>
<td><%= person.country %></td>
<td><%= time_ago_in_words person.created_at %> ago</td>
<td><%= person.groups.order(:id).pluck(:name).to_sentence %></td>
</tr>
<% end %>
或者您可以在控制器中进行过滤:
@people = Person.order(sort_column => sort_direction).to_a.keep_if { |person| person.groups.present? }