У меня есть представление с формой ActionCable, которая работает как драгоценный камень. Однако недавно я добавил группу полей ввода, количество полей ввода определяется пользователем, эти поля ввода в настоящее время настроены на модели, отличной от текущей формы ActionCable.
Это для приложения турнира.
Турнир -> Гонщик -> Lap Times
В этом турнире много гонщиков и много кругов в гонщике. Количество кругов в разных турнирах различается и определяется администратором турнира.
В настоящее время проблема заключается в том, что ActionCable отправит данные, но когда он отправляет данные круга, он следует по маршруту к действию в контроллере, который перемещается от страницы.
Мне требуется, чтобы и форма Racer, и форма Lap Time могли отправлять данные, не отходя от главной страницы.
Я перенес действие контроллера с контроллера LapTime на контроллер Racer и изменил маршрут.
Я также добавил redirect_to в этом контроллере, который указывает на действие show, но также вызывает перезагрузку страницы (не совсем то, что я хочу).
Кроме того, я попытался использовать рендер частичного цикла LapTime после отправки контроллером, но он по-прежнему вызывает перезагрузку страницы.
Я подумал о том, чтобы добавить тег <iframe>
и загрузить в него цикл LapTime, но я не мог понять, как это сделать.
racers_controller.erb
def laps
@lap_time_seconds = LeagueLap.secondizer(lap_params[:lap_time])
tp = time_params2
tp[:lap_time] = @lap_time_seconds
@racer = Racer.where(id: params[:id]).first
@lap = LeagueLap.where(id: params[:id]).first
if @lap.update(time_params2)
flash[:notice] = "Race was successfully updated"
ActionCable.server.broadcast "racetime_channel",
mod_message: racer_render(@racer)
end
end
private
def racer_render(racer)
render(partial: 'racer', locals:{racer: racer})
end
def time_params2
@time_params ||= params.require(:league_lap).permit(:lap_time,:race_id, :league_id)
end
show.html.erb
<% league.racers.each do | racer | %>
<%= form_for racer, remote: true, :html =>{:class => 'ui large form racer-time', method: :put, multipart:true} do |f| %>
<%= f.collection_select :user_id, User.order(:username),:id,:username, include_blank: false %>
<label class="tgl" style="font-size:11px">
<%= f.check_box :dns %>
<span data-on="DNS" data-off="DNS"></span>
</label>
<%= f.hidden_field :id %>
<%= f.submit class:'ui fluid small red submit button admin-save' %>
<% end %>
<% if @league_laps.present? %>
<% @league_laps.each do |lap| %>
<%= form_for lap, remote: true, :html =>{:class => 'ui large form racer-time', method: :put, multipart:true} do |r| %>
<%= r.text_field :lap_time, id:'lap_time_01', class:'time-field',onchange: 'this.form.submit();', :data => { "lap_time_01" => racer.lap_time_01 } %>
<%= r.text_field :race_id, class:'hidden', value: league.id %>
<% end %>
<% end %>
<% end %>
<% end %>
racetime.coffee
App.racetime = App.cable.subscriptions.create "RacetimeChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
$('#participants').append data.mod_message