У меня есть модель Scanner, цель которой - загрузить файл xlsx через активное хранилище, а затем обработать файл в фоновом режиме с помощью sidekiq и roo gem, чтобы создать новый текстовый файл.Этот процесс работает отлично.Часть, в которой я застрял, заключается в том, что в процессе чтения файла xlsx я хочу отобразить в представлении шоу количество проанализированных строк до тех пор, пока файл txt не будет сгенерирован полностью, поэтому я реализую кабель действий, однако он все еще не работает.Вот код:
Показать представление
Пожалуйста, помогите, заранее спасибо.
/ app / models / scanner.rb
class Scanner < ApplicationRecord
has_one_attached :target_file
has_many_attached :documents
after_create_commit do
ScannerBroadcastJob.perform_later(self)
end
end
/ app / jobs / scanner_broadcast_job.rb
class ScannerBroadcastJob < ApplicationJob
queue_as :default
def perform(scanner)
ActionCable.server.broadcast('scanners_channel', {
analized_rows: render_analized_rows(scanner)
})
end
private
def render_analized_rows(scanner)
ApplicationController.renderer.render(partial: 'scanners/scanner',
locals: { scanner: scanner })
end
end
/ app / channel / scanner_channel.rb
class ScannerChannel < ApplicationCable::Channel
def subscribed
stream_from "scanners_channel"
end
def unsubscribed
end
def create(data)
Scanner.create({ analized_rows: data['analized_rows'] })
end
end
/ app / assets / javascripts / channel / scanner.coffee
App.scanner = App.cable.subscriptions.create "ScannerChannel",
connected: ->
disconnected: ->
received: (data) ->
$("#analized_rows").append(data["analized_rows"])
create: (analized_rows) ->
@perform 'create', analized_rows: analized_rows
/ app / views / scanners / _scanner.html.erb
<div class="scanner" id='analized_rows'>
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<table class="table">
<tr>
<th>Filename</th>
<td class="text-center"><%= scanner.filename %></td>
</tr>
<tr>
<th>Status</th>
<td class="text-center"><%= scanner.status %></td>
</tr>
<tr>
<th>Analized Rows</th>
<td class="text-center"><%= scanner.analized_rows %></td>
</tr>
<tr>
<th>Target File</th>
<td class="text-center"><%= link_to
scanner.target_file.blob.filename, url_for(scanner.target_file)
%> </td>
</tr>
</table>
</div>
</div>