每次我再次访问此查询时,都会让我感到困惑,而且我正在寻求更透彻的理解。
我有
class Image < ActiveRecord::Base
has_many :image_categories, dependent: :destroy
has_many :categories, through: :image_categories
end
class PagesController
def portfolio
@images = Image.all
end
end
在我看来,我希望显示所有图像,然后将每个类别名称打印为类名
<%= @images.each do |i| %>
<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 ## class names here">
<%= image_tag(i.photo.url(:image_square_home)) %>
</div>
答案 0 :(得分:1)
您想使用以下代码:
<%= i.categories.pluck(:name).join %>
这会将与当前图像关联的每个类别的名称抓取到一个数组中,然后将它们连接成一个由空格分隔的单个字符串。
在实践中,它看起来像这样:
<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name).join %>">
<%= image_tag(i.photo.url(:image_square_home)) %>
</div>
答案 1 :(得分:1)
由于您要为div添加多个类名,请尝试以下方法:
<div id="item-1" class="isotope-item ok-md-3 ok-xsd-12 ok-sd-6 <%= i.categories.pluck(:name) %>">
如果图片没有类别,您可能需要使用try
方法:
<%= i.categories.try(:pluck, :name) %>
答案 2 :(得分:1)
您可以在帮助文件中处理此问题(例如PagesHelper
),以使您的视图和模型尽可能干净。它可能如下所示:
# app/helpers/pages_helper.rb
module PagesHelper
def image_classes(image)
%w(isotope-item ok-md-3 ok-xsd-12 ok-sd-6) + categories_names(image)
end
private
def categories_names(image)
image.categories.pluck(:name)
end
end
# app/views/pages/portfolio.rb
<%- @images.each do |image| %>
<%= div_for image, class: image_classes(image) do |img| %>
<%= image_tag img.photo.url(:image_square_home) %>
<%= end %>
<% end %>