Блог — количество комментариев на индексной странице

#ruby-on-rails-3 #comments #blogs

#ruby-on-rails-3 #Комментарии #Блоги

Вопрос:

Я пытаюсь отобразить общее количество комментариев (т. Е. 7) рядом со статьей на индексной странице, а не на странице статьи. Хотел бы использовать метод ruby для этого, поскольку он, вероятно, самый простой …?

просмотры /статьи/_article.html.erb

 <div class="article_header">
<b>Title: </b> <%= truncate(article.title, :length => 50) %> 
by <%= article.user.username %> on <%= article.created_at.strftime("%d %B, %Y") %> 
<b>Detail:</b> <%= truncate(article.body, :length => 225) %>
</div>
<br />
<%= blog.comments.count %>


<%= link_to 'Read', article %>
 <% if can? :update, article %>
 | <%= link_to 'Edit', edit_article_path(article) %> |      

<% end %>
  

Комментарии:

1. Наверняка вы делаете это точно так же, как и в любом другом месте?

2. Ты имеешь в виду <%= blog.comments.count %> ?

3. @mischa Я пробовал этот код на странице index.html.erb, но это неправильно?! Не следует ли запросить db для ответа — не уверен, к чему относится объект ‘blog’?

4. @ubique, поскольку вы не включили код до этого, я предполагал, что имя вашего объекта было blog , но, по-видимому, это так article . Попробуйте article.comments.count . Если это не сработает, покажите нам, как вы настраиваете ассоциации в своих моделях.

5. @mischa Я добавил некоторый код, чтобы прояснить вопрос тесто. Я использовал ваше предложение article.comments.count и, кажется, работает нормально. Является ли этот метод дорогостоящим по ресурсам?

Ответ №1:

Передавайте переменную при вызове вашего частичного:

 = render "article", :display_count => true
  

Затем в вашем частичном:

 <% display_count ||= false %>
<%= display_count ? blog.comments.count : '' %>
  

Ответ №2:

Правильный способ сделать это был бы:

 <td><%= link_to "Comment count = #{article.comments.count}", article_path(article) %>
  

Это просто добавит еще один столбец к выводам на вашей индексной странице. На это не обязательно ссылаться, если вы просто хотите отобразить количество:

 <td><%= "Comment count = #{article.comments.count}" %>