如何使用acts_as_taggable时限制tag_counts项



我在播客页面上使用了"acts_as_taggable_on"gem。

tag_counts显示所有标签,使用以下 HAML 代码:

#tag_cloud
%h3
= raw Podcast.tag_counts.sort{ |x, y| x.name.upcase <=> y.name.upcase }.map{  |p| link_to p.name, podcasts_path(tag: p.name), remote: true}.join(' ')

我认为它会显示一团糟,因为标签将不断创建。我只想显示一行,如果标签在该行上方,将显示一个按钮,访问者可以单击它以附加所有标签。

有没有办法限制"acts_as_taggable"中带有tag_counts的项目?

只需在排序、映射然后连接的行中使用first()

Podcast.tag_counts.sort { ... }.map { ... }.join(' ')

第一部分返回一个ArrayArray#first会将结果"限制"为 10,在此示例中:

Podcast.tag_counts.sort { ... }.map { ... }.first(10).join(' ')

在你的代码中,一行很长的行是笨拙的,你应该重新组织或分解它。

该代码不属于视图,您应该在 Podcast 类中编写一个名为get_tag_cloud的类方法,并使其返回要在视图中显示的结果。

当然,您可以限制返回的记录数,但您希望通过什么逻辑来限制?

你可以做:

class Podcast < ApplicationRecord
def self.get_tag_cloud
tag_counts.limit(20).sort{ |x, y| x.name.upcase <=> y.name.upcase }.map{  |p| link_to p.name, podcasts_path(tag: p.name), remote: true}.join(' ')
end

#...
end

那么你的视图就变成:

= raw Podcast.get_tag_cloud

但我真的不认为这是你想要的。您如何确定应该显示哪些标签和应该忽略哪些标签的优先级,如果标签总是被省略,那么允许标签有什么意义?

您需要先整理业务逻辑,然后才能提供更简洁的答案。

你真的需要问一个不同的问题。

相关内容

  • 没有找到相关文章

最新更新