2

ユーザーが新しい投稿を追加したときに、他の投稿の後に追加された投稿コンテンツを表示したいだけです。すべてが機能しているように見えますが、投稿が 2 回追加されているため、フォームが 2 回送信されたように見えます。

  <div data-controller="posts">
     <div data-target="posts.add">
     </div>
     <!-- this is from a rails partial but it's all inside the data-controller -->
     <%= form_with scope: :post, url: posts_path, method: 'post', data: { action: "post#addBody" } do |form| %>
     <%= form.text_field :content, class: "form-control", data: { target: "posts.body"} %>
     <%= form.submit class: "btn btn-primary" %>
  </div>

実際のコントローラー:

import { Controller } from "stimulus"

export default class extends Controller {
  static targets = ["body", "add"]

  addBody() {
    let content = this.bodyTarget.value;
    this.addTarget.insertAdjacentHTML('beforebegin', `<div>${content}</div>`);
  }
}

フォームの送信時にページに投稿が表示されるため、これが機能することはわかっていますが、関数が再度呼び出され、投稿が 2 回表示されます。私はこれを試してみましたがdebugger、Stimulus の内部の何かがaddBody()2 回目を呼び出しているように見えますか?

コンテキストとして、これは posts_controller が行っていることです:

  def create
    @post = current_user.post.build(post_params)

    respond_to do |format|
      if @post.save
        format.json {head :ok}
      else
        raise ActiveRecord::Rollback
      end
    end

  end
4

2 に答える 2