#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