如何在循环内访问关联模型的单个属性?

最后发布: 2015-11-15 17:59:26


问题

我非常需要您的帮助。 我有很多对:through关系模型:产品,类别和分类(作为中间模型)。 在我看来,我想遍历@products并在每次迭代中获取类别的字段“ title”。

这是我的看法:

<div class="col-md-9">
                <div class="row">
                    <section id="projects">
                        <ul id="thumbs">
                            <!-- Item Project and Filter Name -->
                        <% @products.each do |product| %>
                            <% product.categories.each do |category| %>
                                <li class="item-thumbs col-md-4 <%= category.title %> ">  
                            <% end %>
                               <!-- Fancybox - Gallery Enabled - Title - Full Image -->
                                <a class="hover-wrap fancybox" data-fancybox-group="gallery"    title="The City" >
                                    <span class="overlay-img"></span>
                                    <%= icon 'font-icon-plus' %>
                                </a>
                                <!-- Thumb Image and Description -->
                                <%= image_tag product.product_images, alt: product.description %>
                                <p><%= product.price %></p>
                            </li>                            
                            <!-- End Item Project -->  
                        <% end %>   
                        </ul>

                    </section>

                </div>

如您所见,我需要在每次迭代中获取类别的标题,以便将其插入到li“类”中,并将每个产品标签链接到菜单“ li”。

问题是,当我遍历@products循环内的@categories时,它仅执行一次,因此我没有获得每个产品的类别标题。

ruby-on-rails
回答

在我看来,您的循环反复创建了开头的li标签,而不是像您希望的那样收集所有类别标题,从而导致HTML无效。 尝试像这样编写标记:

<div class="col-md-9">
    <div class="row">
        <section id="projects">
            <ul id="thumbs">
                <!-- Item Project and Filter Name -->
                <% @products.each do |product| %>
                    <!-- RELEVANT CHANGES RIGHT HERE! -->
                    <li class="item-thumbs col-md-4 <%= product.categories.pluck(:title).join(' ') %>">
                        <!-- Fancybox - Gallery Enabled - Title - Full Image -->
                        <a class="hover-wrap fancybox" data-fancybox-group="gallery" title="The City" >
                            <span class="overlay-img"></span>
                            <%= icon 'font-icon-plus' %>
                        </a>
                        <!-- Thumb Image and Description -->
                        <%= image_tag product.product_images, alt: product.description %>
                        <p><%= product.price %></p>
                    </li>                            
                    <!-- End Item Project -->
                <% end %>
            </ul>
        </section>
    </div>
</div>

它使用Rails的便捷的pluck方法直接从数据库中获取所有相关的类别标题,然后将它们与空格连接在一起以创建有效的class字符串。 这是您想要的效果吗?