簡體   English   中英

Rails-使用will_paginate時,Ajax會觸發多次

[英]Rails - Ajax fires more than once when using will_paginate

我是Ruby on Rails的初學者。 我正在嘗試學習將Ajax與Rails結合使用。 到目前為止,我已經使用Ajax進行了基本的CRUD操作。

但是問題是,例如,在創建新post ,它只能創建一次。 但是在單擊分頁鏈接之一后。 它創建了兩次。 如果我第三次單擊並添加新post ,那么它被添加了三次。

刪除也是如此(即,如果單擊三個分頁鏈接,則確認窗口將顯示3次)

注意,分頁不使用Ajax。

這是我的代碼:

posts_controller.rb

class PostsController < ApplicationController
  before_action :get_all, only: [:index, :create, :destroy]

  def index
    @post = Post.new
  end

  def new
    @post = Post.new
  end

  def create
    @post = Post.new(post_params)
    if @post.save
      @post = Post.new
      respond_to do |format|
        format.html { redirect_to posts_url}
        format.js
      end
    else
      respond_to do |format|
        format.html { render 'posts/new' }
        format.js
      end
    end
  end

  private
  def post_params
    params.require(:post).permit(:title, :content)
  end

  def get_all
    @posts = Post.paginate(page: params[:page], per_page: 3)
  end
end

index.html.erb:

<div class="form_wrapper">
<%= render 'posts/form_ajax' %>
</div>

<hr/>
<div class="result"><p></p></div>

<div class="posts_wrapper">
<%= render 'posts/post', posts: @posts %>
</div>
  <% content_for :javascripts do %>
      <%= javascript_include_tag 'index_page' %>
  <% end %>

文章/ _form_ajax.html.erb

<%= form_for(@post, remote: true) do |f| %>
    <%= render "shared/form", f: f %>
    <div>
      <%= f.submit "Add" %>
    </div>
    <% if @post.errors.any? %>
        <ul>
          <% @post.errors.full_messages.each do |err| %>
              <li><%= err %></li>
          <% end %>
        </ul>
    <% end %>
<% end %>

文章/ _post.html.erb

<%= will_paginate @posts, :params => {:action => 'index', :controller => 'posts' } %>
<% @posts.each do |p| %>
    <div class="post">
      <p>Title: <%= p.title %></p>
      <p>Content: <%= p.content %></p>
      <p>
        <%= link_to "edit", edit_post_path(p) %>
        <%= link_to p, method: :delete, data: { confirm: 'Are you sure?' }, remote: true do %>
            <button>Delete</button>
        <% end %>
      </p>
    </div>

<hr/>
<% end %>

文章/ create.js.erb

$(".form_wrapper").html("<%= escape_javascript(render 'posts/form_ajax') %>");
$(".posts_wrapper").html("<%= escape_javascript(render 'posts/post', posts: @posts) %>");

您是否嘗試關閉了渦輪鏈接? 我注意到有時它不能與某些javascript文件gem文件混為一談,application.js文件擺脫// =要求應用程序文件中添加 turbolink並注釋掉gem文件中的 gem'turbolinks ' ,然后重新打包

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM