Множить без подсчета числа в рельсах 4
Я создаю приложение для блога. Я хотел бы иметь возможность использовать множественное число слова "статья", если опубликовано более одного "сообщения".
Нравится так: Доступные статьи или Доступные статьи
Это то, что у меня есть....
Available <%= pluralize @posts.published, "Article" %>:
я пробовал
Available <%= pluralize @posts.published.count, "Article" %>:
и это работает... но я не хочу номер. Это не должно читать Доступные 5 Статей.... у этого не должно быть никакого числа.
6 ответов
Я сам искал ответ на этот вопрос и не был удовлетворен ни одним из существующих. Вот самое простое решение, которое я нашел:
Available <%= "Article".pluralize(@posts.published.count) %>:
Документация здесь. Соответствующие биты:
Возвращает множественное число слова в строке.
If the optional parameter count is specified, the singular form will be returned if count == 1. For any other value of count the plural will be returned. 'post'.pluralize # => "posts" 'apple'.pluralize(1) # => "apple" 'apple'.pluralize(2) # => "apples"
Вы можете использовать Rails Internationalization (I18n) для достижения этой цели. В вашем config/data/en.yml
ваши переводы будут примерно такими:
en:
available_articles:
zero: Available Article
one: Available Article
other: Available Articles
И, по вашему мнению, вы сможете получить перевод следующим образом:
<%= t(:available_articles, count: @posts.published.count) %>
Да, я сделал так, что мне так понравилось:
- if @post.comments.persisted.any?
h4
= t(:available_comments, count: @post.comments.count)
= render @post.comments.persisted
- else
p
| There are no comments for this post.
en:
available_comments:
one: "%{count} Comment"
other: "%{count} Comments"
Спасибо @Jakob W!
Ты можешь использовать <%= @posts.published.count > 0 ? "Available Article".pluralize(@posts.published.count) : nil %>:
Я обнаружил, что в этом множественном числе есть одна ошибка
"user".pluralize(1) => "user"
"user".pluralize(2) => "users"
но
"user".pluralize(0) => "users"
Как насчет этой простой логики? Я думаю, что вы хотите отобразить номер статьи, а если нет, то просто удалите <%= @posts.published.count %>
Available <%= @posts.published.count %>
<% if @posts.published.count > 1 %>
Articles
<% else %>
Article
<% end %>
ИЛИ ЖЕ
Вы можете использовать троичный оператор,
Available <%= @posts.published.count %> <%= if (@posts.published.count > 1) ? "Articles" : "Article" %>
Выход:
=> Available 1 Article # if there is only one article
=> Available 2 Articles # if there is more then 1 articles