У меня проблема с моим запросом SQL, пытающимся загрузить его в формате CSV.
Я знаю о внедрении SQL, но пока это все, что у меня есть
Так что у меня есть этот запрос SQL.payment_report или результат публикуется в представлении.Я передаю запрос результата на ActiveRecord::Base.connection.exec_query()
и выдаю мне нужный результат, проблема возникает при попытке загрузить его как CSV.
sql = "SELECT
payments.response_code as transaction_id,
orders."'number'" || '-' || payments."'number'" as invoice_number,
orders.user_id,
orders.email,
variants.sku,
line_items.price,
orders.item_total,
orders.total,
payments.created_at,
payments.updated_at
FROM
public.spree_payments,
public.spree_orders,
public.spree_line_items,
public.spree_variants
WHERE
payments.order_id = orders.id AND
orders.id = line_items.order_id AND
line_items.variant_id = variants.id AND
payments.state = 'completed' AND
orders.completed_at BETWEEN SYMMETRIC
'#{params[:q][:created_at_gt]}' AND '#{params[:q][:created_at_lt]}'
"
@payment_report = ActiveRecord::Base.connection.exec_query(sql)
У меня есть этот кодскачать мой формат CSV.reports_controller.rb
respond_with(@payment_report) do |format|
format.csv do
send_data @payment_report.to_payment_report_csv,
filename: "Payment Report - #{params[:q][:created_at_gt].to_date} to #{params[:q][:created_at_lt].to_date}.csv"
end
У меня есть этот код на моей модели payment.rb
def self.to_payment_report_csv
col_names = %w[
transaction_id
number
user_id
email
sku
price
item_total
total
created_at
updated_at
]
CSV.generate do |csv|
csv << col_names
all.each do |pay|
row = []
row << pay.transaction_id
row << pay.number
# row << pay.user.id
# row << pay.email
# row << pay.sku
# row << pay.price
# row << pay.item_total
# row << pay.total
row << pay.created_at
row << pay.updated_at
csv << row
end
end
end
, но я попытался нажать кнопку и загрузить, я получаю эту ошибку.
undefined method to_payment_report_csv for #<ActiveRecord::Result:0x00007f3faf4c8ad8>
я пришел к выводу, что при проверке моей модели оплаты у нее есть ActiveRecord::Relation
, поэтому я хотел преобразовать ее.
Я делаю необработанный SQL, потому чтоусловие мешает мне использовать ActiveRecord.Кроме того, я должен использовать Ransack, но опять же условие мешает мне использовать Ransack.Таким образом, форма выписки используется только для получения дат.Я тоже думаю из-за моей схемы.
Orders:
has_may: :Line_items, :Payments, Variants
LineItem:
belongs_to: :Variant, :Order
Payment
belongs_to: Order
Variant doesn't relate to anything
ОБНОВЛЕНИЕ по какой-то причине это работает.
Spree::Order.ransack(orders_gt: params[:q][:created_at_gt], orders_lt:
params[:q][:created_at_lt], payments_order_id_in: [Spree::Order.ids],
payments_state_eq: 'completed', orders_id_in: [Spree::LineItem.all.pluck(:order_id)]).result.includes(:payments, :line_items, :variants).joins(:line_items, :payments, :variants).to_json
но если ядобавил этот.line_items_variant_id_in: [Spree::Variant.ids]
я получаю и ошибка
undefined method `to_i' for #<Array:0x00007fbd991fd7c8>
Я даже не положил to_i
где-либо.хммм.есть идеи?