渲染每个对象的属性 - Rails

时间:2016-09-15 01:56:44

标签: ruby-on-rails

我现在有一个在页面上呈现对象的视图。对象是Integration。在Integration对象上,我有一个名为filters的属性。 Filters存储为数组。我需要做的就是在列表中列出它们下面的每个集成的过滤器。这是我的代码。

视图

 <% if @integrations.any? %>
  <div class="configured-integrations">
    <h3 class="heading-3">My Configured Integrations:</h3>

    <ul class="integration-list integration-list--compact">
      <%= render @integrations %>
    </ul>
  </div>
 <% end %>

截图

enter image description here

在屏幕截图中,您可以看到每个元素都是集成。我需要在标题下方列出每个集成的过滤器。

控制器

 def index
    # Get the list of the user's integrations grouped first by provider then
    # from oldest to newest."
    @integrations = current_account.integrations
      .order(type: :asc, created_at: :asc)
 end

我希望这很清楚。回顾一下:我需要在下面的每个集成中列出过滤器。我已经尝试了类似@integrations.first.filters这样的内容,但是因为它是静态调用而无法工作。我需要像列表一样的东西。谢谢

2 个答案:

答案 0 :(得分:0)

您需要迭代每次整合,然后<%= render integeration.filters %>

 <% if @integrations.any? %>
   <div class="configured-integrations">
     <h3 class="heading-3">My Configured Integrations:</h3>

     <ul class="integration-list integration-list--compact">
       <% @integrations.each do |integration| %>
          <li>
            <%= integration %>
            <ul class="">
              <%= render integration.filters %>
            </ul>
          </li>
       <% end %>
     </ul>
   </div>
 <% end %>

您将不得不更新此代码以使部分工作,但我希望这可以解决这个问题。

您无法在此处使用快捷方式<%= render @integrations %>,因为您需要@integrations内的子组。所以你必须做很长的路要走。

答案 1 :(得分:0)

您可以添加另一个部分来渲染与您的集成关联的所有过滤器。

在视图中创建部分文件 _show_filters.html.erb

    <% filters.each do |filter| %>
      <li><%= filter %></li>          
    <% end %>

在迭代你的@integration对象时渲染这个部分。

<% if @integrations.any? %>
   <div class="configured-integrations">
     <h3 class="heading-3">My Configured Integrations:</h3>
     <ul class="integration-list integration-list--compact">
       <% @integrations.each do |integration| %>
          <li>
            <%= integration %>
            <ul class="">
              <%= render 'show_filters', filters: integration.filters %>
            </ul>
          </li>
       <% end %>
     </ul>
   </div>
 <% end %>