在另一个循环中分别调用每个文章标记

时间:2012-08-05 15:13:42

标签: ruby-on-rails ruby methods

我有一篇文章,每篇文章都有标签。现在我将所有标签一起调用:

<% @articles.each do |article| %>
  <div class="articlebox">
    <article>
      <h4>
        <%= link_to article.title, article_path(article) %>
      </h4>
        <%= markdown article.body %>
      <span class="articletagbox">  
        <%= article.tag_tokens %>
      </span>   
<% end %>

现在我的班级绕过所有文章标签。我希望它能分别绕过每个文章标签。

我尝试过一个简单的

<% @tags.each do |tag| %>

但是这给了我一个未定义的方法“每个”nilclass错误。

我知道这很简单,但我无法弄清楚我应该改变什么才能让它发挥作用。我想我需要在文章模型中定义一些东西?

谢谢!

修改

所以现在我的代码看起来像这样:

<% article.tags.each do |tag| %>
  <span class="articletagbox">  
    <%= article.tag_tokens %>
  </span>   
<% end %>   

和article.rb中的方法是:

def tag_tokens
  self.tags.collect{|t| t.name}.join(", ")
end

返回与每篇文章相关联的所有标签与标签相同的次数。

例如,如果我在文章上有三个标签:tag1,tag2,tag3我得到

<class>tag1 tag2 tag3</class> <class>tag1 tag2 tag3</class> <class>tag1 tag2 tag3</class>

相反,我想要

<class>tag1</class> <class>tag2</class> <class>tag3</class>

所以我只是不确定为什么我将所有与每篇文章相关联的标签一起返回,但与标签的次数相同。我希望这是有道理的。

2 个答案:

答案 0 :(得分:2)

如果文章循环中有一篇文章has many :tags

<% article.tags.each do |tag| %>

编辑后:您在循环标记时输出了文章调用的方法。没有意义,你正在循环标记,而是调用tag.name

检查特定语法的slhck答案

答案 1 :(得分:2)

你说你想要:

<class>tag1</class> <class>tag2</class> <class>tag3</class>

我假设class你是指应该单独应用于每个标签的span格式?摆脱tag_tokens方法。无论如何,在标签模型中定义格式化方法可能是不好的方式 - 而是在视图中进行格式化,或者partial

在您的视图中,在您浏览所有文章的循环中,只需执行以下操作:

<% article.tags.each do |tag| %>
  <span class="articletagbox"><%= tag.name %></span>
<% end %>

这将输出:

<span class="articletagbox">tag1</span>
<span class="articletagbox">tag2</span>

......等等。