【问题标题】:Display tag links using acts_as_taggable_on使用acts_as_taggable_on 显示标签链接
【发布时间】:2017-03-01 08:20:55
【问题描述】:

我对acts_as_taggable_on 有疑问。我正在制作一个 BBS 并想显示链接标签。但是,我的网站只能显示字符串而不是链接。所以我想把链接放到字符串。

我想链接到每个标签#show。

现在一些标签被保存在Tag 表中,这个表有这些列(id,name,created_count)

这是我的代码:

post.rb

def save_tags
 array = self.check_taggable_word(self.title)
 self.tag_list.add(array, parse: true)
end
def tag_lists
 tag_lists = self.tag_list
end
def check_taggable_word(text)
 ary = Array.new
 nm = Natto::MeCab.new
 nm.parse(text) do |n|
   ary<<n.surface
 end
 tags = ActsAsTaggableOn::Tag.pluck(:name)
 return ary & tags
end

show.html.erb(帖子)

  Tag:
  <% @post.save_tags %>
  <%= @post.tag_list %>

posts_controller.rb

def show
    @post = Post.find(params[:id])
    @category = @post.category
end

routes.rb

Rails.application.routes.draw do
 root 'static_pages#home'
 get '/about' => 'static_pages#about'
 get '/contact' => 'static_pages#contact'
 resources :categories do
  resources :posts
 end
 resources :posts do
  resources :comments
 end
 resources :tags, only: [:index, :show]
end

【问题讨论】:

  • 不知道我是否理解。您是在问如何建立链接?
  • 对于链接,您可以使用 link_to 帮助器.....gem 说要创建这样的链接: :tag, :id = > tag.name }, :class=> css_class %>
  • 是的。我想做标签链接。
  • 我试过&lt;%= link_to tag.name, { :action =&gt; :tag, :id =&gt; tag.name }, :class =&gt; css_class %&gt;,但显示wrong number of arguments (0 for 1..4)错误。
  • 对不起,我创建了一个答案,评论刚刚被复制,不一定适用于您的代码。

标签: ruby-on-rails ruby acts-as-taggable-on


【解决方案1】:

不太确定您要实现什么,如果您也发布您的控制器可能会有所帮助。

然而,在rails中显示链接可以通过使用link_to helper来实现

<% = link_to 'text', some_path %>

您的目标是将链接连接到您处理“标签”的控制器操作 您提到的 gem 为您提供了在视图中显示链接的另一个示例。这可能对您有用,具体取决于您在控制器中的命名约定。

<% tag_cloud(@tags) do |tag| %>
  <%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => 'css_class' %>
<% end %>

一般情况下:需要调用

@tags = Tags.all 

在控制器中的某个地方获取标签的所有条目。比您可以循环遍历每个标签...可以为您生成所有标签的链接,如果您想链接到标签#show,则链接必须转到您找到该特定标签的操作。例如,这可以在那个动作中:

@tag = Tag.find(params[:id])

。就是这样。

好的,我再次编辑。试一试:

在您发布控制器#show 中,您可以像这样显示该帖子的所有标签

@post.tags.each do |tag|
<%= link_to tag.name, tag %>

这要求您的标签具有属性“名称”

在您的帖子#index 中您可以这样做

<%@post.each do |post|%>
<%post.tags.each do |tag|%>
<%= link_to tag.name, tag %><%end%><%end%>

如果您只想显示所有标签而不显示帖子等。试试:

在您的控制器帖子中#index

@tags = Tag.all 

<%@tags.each do |tag|%>
<%= link_to tag.name, tag %><%end%>

在您当前的控制器操作 posts#show 中,您只会找到该 @post 的标签,因为您所做的只是通过 id 查找帖子。因此,如果关联正确,您只会找到该帖子的标签。

这允许你做@post.tags.each do |tag|...等。 tag 可用于 link_to 助手。
如果你使用 它将向您显示一个带有 tag.name 的链接,该链接链接到属于该帖子的每个标签的特定标签。

【讨论】:

  • 非常感谢 KcUS_unico。我添加了两个标签,然后尝试了上面的代码,但显示wrong number of arguments (1 for 2) 错误。
  • 尝试:
  • 这段代码看起来很有效。但此链接路径指向(.../posts/"tag.name")。我想路径到(.../tags/“tag.name”)。非常感谢 KcUS_unico。
  • 是的,你需要在你的 routes.rb 中有一个用于这个动作的路由。你有吗?
  • 谢谢KcUS!我只是将我的 routes.rb 更新到上面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多