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

しかし、それは私に未定義のメソッド "each" 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

これは、各記事に関連付けられたすべてのタグを、タグの数と同じ回数だけ返します。

たとえば、記事に 3 つのタグ (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 に答える