Множить без подсчета числа в рельсах 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 
Другие вопросы по тегам