1

我有一篇文章,每篇文章都有标签。现在我把所有的标签都叫在一起:

<% @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>

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

4

2 回答 2

2

如果一篇文章has many :tags然后在文章循环中做

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

在您的编辑之后:您正在输出一个在文章上调用的方法,同时在标签上循环。没有意义,你在标签上循环,tag.name而是打电话!

检查 slhck 答案以了解特定语法

于 2012-08-05T15:15:11.910 回答
2

你说你想要:

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

我假设class您的意思span是应该单独应用于每个标签的格式?只需摆脱该tag_tokens方法。无论如何,在标签的模型中定义格式化方法可能是不好的风格——而不是在视图中进行格式化,或者在部分.

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

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

这将输出:

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

... 等等。

于 2012-08-05T16:47:06.987 回答