私は Stimulus Reflex を既存の Rails 6 アプリで稼働させることに取り組んできました。成功!アクションでいくつかの反射神経があり、ActionCable はその仕事をしています...すべてうまくいっています。ただし、反射が成功し、Stimulus が ActionCable を介して通信した後、私の目の前でページが更新され、重複したコンテンツが表示されます。
以下のフォームは、フォーム オブジェクトを保存するリフレックスにヒットするだけです。ご覧のとおり、Stimulus または Turbolinks がフォームを再レンダリングした後、ページは正しくありません。この場合、フォーム送信ボタンを二重にレンダリングします。
なぜこれが発生しているのかわかりませんが、ここの誰かがこの二重レンダリングの問題を見たことがあることを願っています.
前
後
HTML
<%= block_card title: 'BILLING', footer: (link_to('Add Billing Detail', new_project_billing_detail_path(@project)) if policy(@project.billing_details.new).new?) do %>
<%= @alert %>
<%= form_with model: @billing_detail, html: { novalidate: true }, data: { reflex: "submit->BillingDetailReflex#submit" } do |form| %>
<% if @billing_detail.errors.any? %>
<% @billing_detail.errors.full_messages.each do |message| %>
<%= tag.li message %>
<% end %>
<% end %>
<div>
<%= form.text_field :date,
placeholer: 'Date',
required: true,
data: { reflex: "change->BillingDetailReflex#submit" } %>
<%= form.text_field :billing_code,
placeholer: 'Billing Code',
required: true,
data: { reflex: "change->BillingDetailReflex#submit" } %>
<%= form.text_field :project_id %>
<%= form.text_field :user_id, value: current_user.id %>
</div>
<%= form.submit %>
<% end %>
<% end %>
反射
# frozen_string_literal: true
class BillingDetailReflex < ApplicationReflex
before_reflex do
@billing_detail = BillingDetail.new
@billing_detail.assign_attributes(billing_detail_params)
end
def submit
if @billing_detail.save!
@alert = "saved id:#{ @billing_detail&.id }"
else
@alert = 'NOT saved'
end
end
private
def billing_detail_params
params.require(:billing_detail).permit(
:date,
:billing_cycle,
:user_id,
:project_id
)
end
end