Как отформатировать дату при использовании pluck в рельсах

#ruby-on-rails #pluck

#рубин на рельсах #срывать

Вопрос:

Моя модель пользователя выглядит так. У пользователя есть много прикрепленных резюме.

 class User lt; ApplicationRecord  has_many_attached :resumes, dependent: :destroy end  

Теперь в другой форме я хочу показать список резюме, загруженных пользователем, в порядке убывания. Мне удается сделать это, используя следующий код.

 lt;%= f.select :resume, options_for_select(@user.resumes.includes(:blob).references(:blob).pluck(:filename, :created_at).reverse.map{ |e| e.join(' - ') }), prompt: '-- Select --', class: 'form-control' %gt;  

Так что теперь в моем раскрывающемся списке «Выбрать» я могу видеть все загруженные резюме в порядке убывания. Мое выпадающее меню выглядит так file_name.pdf - 2021-11-30 03-59-59 UTC . Я не хочу показывать время в выпадающем списке. Я просто хочу отформатировать его и показать дату с именем файла, что-то вроде этого john_resume.pdf 11/11/2021 .

Итак, мой вопрос в том, как я могу отформатировать дату при использовании pluck ?

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

1. Вы должны как можно чаще избегать выполнения запросов к базе данных в своем представлении — ваши представления должны просто получать данные от контроллера и отображать их максимально простым способом. Представления-это беспорядочная мешанина разметки и ERB, и это рецепт для очень медленных приложений, так как вы скоро потеряете представление о том, какие запросы к базе данных выполняет каждое действие. Переместите запрос в контроллер, и вы, возможно, захотите пересмотреть использование pluck, так как вам придется анализировать даты, а не просто работать с моделями.

2. Также вместо того и другого include и references просто используйте eager_load . Вот что происходит в любом случае.

Ответ №1:

 lt;% options = @user.resumes.includes(:blob).references(:blob).pluck(:filename, :created_at).reverse.map { |e| filename = e.first; created_at = e.last; [filename, created_at.strftime('%d/%m/%Y')].join(' - ') }%gt; lt;%= f.select :resume, options_for_select(options), prompt: '-- Select --', class: 'form-control' %gt;