从视图中隐藏数据库中的信息。 - 铁路

时间:2016-04-22 14:38:31

标签: ruby-on-rails ruby

我现在有一张表,显示了用户的一系列属性。这是我的问题。每个人都有能力注册一个小组,但在某些边缘情况下,一个人可以进入桌面而无需注册一个小组。为了使阅读表格的用户清楚起见,我想简单地将未登记的每个人隐藏在表格中。这比我预想的要复杂一点。我会展示一些代码和截图,以便更好地理解。

enter image description here

你可以看到一个人没有任何小组不在桌面上显示。

我试图制作一个方法,并在渲染表的控制器上调用它。人与人是两种不同的模型,与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

1 个答案:

答案 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? }