В настоящее время у меня есть контроллер, который будет обрабатывать вызов для экспорта таблицы в файл CSV с использованием драгоценного камня FasterCSV. Проблема в том, что информация, хранящаяся в базе данных, иногда не ясна, поэтому я хочу изменить вывод для конкретного столбца.Изменение выхода для FasterCSV
В моем столбце project.status, например, есть номера вместо статусов, т.е. 1 в базе данных соответствует Активному, 2 для Неактивного и 0 для Not Yet. Когда я экспортирую таблицу, она отображает 0,1,2 вместо активных, неактивных или еще не принято. Есть идеи, как это реализовать?
Я пробовал простую петлю, которая проверила бы окончательный сгенерированный CSV-файл и изменила бы каждый 0,1,2 на его соответствующий вывод, но проблема в том, что каждый другой столбец с 0,1,2 тоже изменился. Я не уверен, как изолировать столбец. Заранее благодарен
def csv
qt = params[:selection]
@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions => ["name LIKE ? OR description LIKE ?", "%#{qt}%", "%#{qt}%"])
csv_string = FasterCSV.generate(:encoding => 'u') do |csv|
csv << ["Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"]
@lists.each do |project|
csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at]
end
end
filename = Time.now.strftime("%Y%m%d") + ".csv"
send_data(csv_string,
:type => 'text/csv; charset=UTF-8; header=present',
:filename => filename)
end
У меня есть мои записи как это STATUS = {: APPLYING => 0,: REJECTED => 1,: READY => 2,: SUSPENDED => 3,: PENDING => 4} .freeze, где все находится в одном переменная. Я все еще смущен, почему мне нужно изменить мою модель. Разве это не должно выглядеть мнение или контроллер? – TheRealVayne
Совсем не так, модель отвечает за всю бизнес-логику, которая в этом случае была бы переводом хранимых полей базы данных в поля, читаемые человеком. Модель может использоваться многочисленными представлениями и контроллерами, и дублирование кода для обеспечения читаемого статуса будет довольно значительным анти-шаблоном. –