ユーザーが新しい投稿を追加したときに、他の投稿の後に追加された投稿コンテンツを表示したいだけです。すべてが機能しているように見えますが、投稿が 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