Я пытаюсь экспортировать данные в CSV на основе текущей страницы "show" case_main, на которой кнопка экспорта включена. Я считаю, что мне нужно что-то похожее на следующее, но я не могу заставить его работать. Любая попытка ссылки на self.id или: id приводит к ошибке или nil.
Billedtime.where(case_main_id: self.id).each do |time|
Использование Billedtime.all.each do | time |позволяет запускать код, но он, очевидно, захватывает все, а не только выставленные счета для текущего case_main.
case_main имеет два однозначных сообщения, составленное время и строковые элементы. Я пытаюсь объединить billedtimes + lineitems для конкретного case_main в один экспорт .CSV.
Вот код:
Модель:
def self.to_csv
desired_columns = ["Client Code",
"Case Name" ,
"Date",
"Description",
"Hours",
"Charge",
]
CSV.generate(headers: true) do |csv|
# Header columns
csv << desired_columns
# Data columns
Billedtime.where(case_main_id: self.id).each do |time|
csv <<
[
time.case_main.client.client_code,
time.case_main.case_name,
time.billedtime_date,
time.billedtime_description,
time.billedtime_hours,
time.billedtime_total
]
end
Lineitem.where(case_main_id: self.id).each do |line|
csv <<
[
line.case_main.client.client_code,
line.case_main.case_name,
line.lineitem_date.to_date,
line.lineitem_description,
' ',
line.lineitem_total
]
end
end
end
Контроллер:
def show
@case_mains = CaseMain.where(:id => @case_main.id).limit(5)
respond_to do |format|
format.html
format.csv { send_data @case_mains.to_csv, filename: "case-#{Date.today}.csv"}
end
end
Просмотр:
<%= link_to "Export Billed Items", case_main_path(format: "csv") %>
Спасибо!