как проверить условие при экспорте Excel в rails с помощью Axlsx gem

#ruby-on-rails #excel #ruby-on-rails-5 #axlsx

#ruby-on-rails #excel #ruby-on-rails-5 #axlsx

Вопрос:

project имеет много task . task имеет атрибут status с целочисленным полем 0,1 и 2, теперь я хочу напечатать not-completed для 0, completed для 1 и not-started для 2.

в настоящее время я могу печатать целое число вместо текста. я пытался if condition , но получил синтаксическую ошибку

download.xlsx.axlsx

 @project.tasks.each do |task|
  sheet.add_row [task.task_name, task.planned_end_date, task.status]
end
  

Ответ №1:

Вы можете написать метод экземпляра для объекта task, который вернет желаемое status string значение в зависимости от status значения.

 # app/models/task.rb
    
def display_status
  case status
  when 0
    "not-completed"
  when 1
    "completed"
  when 2
    "not-started"
  else
    ""
  end
end
  

После этого используйте этот метод в своем .xlsx шаблоне представления.

 # download.xlsx.axlsx

@project.tasks.each do |task|
  sheet.add_row [task.task_name, task.planned_end_date, task.display_status]
end
  

Надеюсь, это сработает для вас. Спасибо 🙂

Ответ №2:

Вы можете использовать enum для атрибута статуса в модели задачи

 # app/models/task.rb

enum status: %i[not-completed completed not-started]
  

Это свяжет значение статуса 0 с «Не завершено», 1 с «завершено» и 2 с «не начато».

Теперь, если вы получите доступ к task.status, он будет выводить только строковое значение. Если вам нужно целочисленное значение, вам придется использовать Task.statuses[‘завершено’].

у вас также будут некоторые дополнительные методы, такие как not-completed?, завершено? и не запущен? который вернет true или false в зависимости от значения атрибута status.

Пожалуйста, обратитесь к ссылкам ниже для получения более подробной информации

https://api.rubyonrails.org/v5.2.3/classes/ActiveRecord/Enum.html
https://naturaily.com/blog/ruby-on-rails-enum