Использование concat в api индекса rails - PullRequest
0 голосов
/ 26 мая 2020

Я работаю над api, в котором мне нужны данные разного статуса в одном массиве.

def filter_index_by_admin
  articles = []
  articles.concat(Article.pending.map { |article| ArticlePresenter.new(article)._show})
  articles.concat(Current.user.articles.where(status: 'approved').map { |article| ArticlePresenter.new(article)._show})
  articles.concat(Current.user.articles.where(status: 'rejected').map { |article| ArticlePresenter.new(article)._show})
  articles.concat(Current.user.articles.where(status: 'saved').map { |article| ArticlePresenter.new(article)._show(user_included: true, comments_included: true)})
  render json: { articles: articles }, status: :ok                                          
end

в приведенном выше api есть массив в названных статьях, в которых я объединяю данные в третьей строке Я получаю индекс всех статей, созданных всеми пользователями, у которых статус ожидает рассмотрения.

в четвертой строке я объединяю статьи текущих пользователей со статусом утвержден и то же самое в пятой строке со статусом отклонено и шестая строка со статусом сохранена .

Я знаю, что это не грязный код.

Итак, есть ли способ сделать это в изысканный способ?

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете сделать это:

articles = Current.user.articles.where(status: ['pending', 'rejected', 'approved', 'saved']).map { |article| ArticlePresenter.new(article)._show})

ОБНОВЛЕНИЕ

Если вы используете рельсы 5 +

articles = Article.where(user_id: Current.uer.id, status: ['rejected', 'approved', 'saved']).or(Article.pending).map { |article| ArticlePresenter.new(article)._show})
...