在rails视图中显示子值

时间:2017-03-29 19:15:03

标签: ruby-on-rails view relationship

我正在开发一个相当大的rails应用程序,其中一个任务是显示一个非常大的客户端列表。每个客户端都有多个服务器我能够通过视图中的@client_name循环显示所有客户端。但是,我无法显示每个客户端各自的服务器。 (我希望这是有道理的)。为了提供更多的上下文,当您访问客户端索引页面时,您可以在客户端上进行选择,并且应该显示与该客户端关联的服务器的下拉列表。然后,用户可以从该下拉列表中进行选择,并将重定向到该单个服务器显示页面。

我的控制器看起来像这样

def index
 @nodes = Node.all.paginate(page: params[:page], per_page: 40
end

def node_filter
  @client_name =  @nodes.distinct.pluck(:client_name) 
  @hostname = @nodes.pluck(:hostname)
end

索引(视图)看起来像这样(为清晰起见,删除了样式)

<% @client_name.each do |cn| %>
  <tr>
    <td>
     <p><%= cn %></p>
     <p><%=@hostname %></p> <!-- displaying ALL servers regardless of client ownership -->
    </td>
  </tr>
<% end %>

这完全符合您的预期。每个下拉列表都包含所有主机的列表。我尝试创建一个辅助方法,它将遍历@hostname数组,尝试将其匹配到&#34; cn&#34;并显示它,但根本没有成功。我知道有一个简单的方法可以做到这一点,我确信我过度思考它并且它让我发疯,所以我要与专业人士联系。任何建议或帮助将不胜感激。

此外,为了简化操作,这是一个包含client_name和hostname的表。

1 个答案:

答案 0 :(得分:0)

这结果是一个关系问题。将所有内容存储在一个表中,然后尝试按照我的方式显示信息,然后尝试进行愚蠢的解析以显示我需要它们的方式。相反,拆分表并在它们之间创建适当的关系使我能够轻松查询和显示我需要的内容。