#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}" %>