Rails - Ajax 在使用 will_paginate 时触发不止一次
Rails - Ajax fires more than once when using will_paginate
我是 Rails Ruby 的初学者。我正在尝试学习使用 Ajax 和 Rails。到目前为止一切顺利,我已经使用 Ajax 进行了基本的 CRUD 操作。
但问题是,例如,当创建一个新的post
时,它只创建了一次。但是在点击其中一个分页链接之后。它创建了两次。如果我第三次点击添加新的post
,就添加了三次
删除也是一样(即点击三个分页链接会出现三次确认window)
请注意,分页未使用 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 %>
posts/_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 %>
posts/_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 %>
posts/create.js.erb
$(".form_wrapper").html("<%= escape_javascript(render 'posts/form_ajax') %>");
$(".posts_wrapper").html("<%= escape_javascript(render 'posts/post', posts: @posts) %>");
您是否尝试关闭 turbo-links?我注意到有时它不会与一些 javascript 文件 gem 文件,application.js 文件摆脱 //=在你的 应用程序文件 中需要 turbolinks 并在你的 [=12] 中注释掉 gem 'turbolinks' =]gem文件,然后重新捆绑
我是 Rails Ruby 的初学者。我正在尝试学习使用 Ajax 和 Rails。到目前为止一切顺利,我已经使用 Ajax 进行了基本的 CRUD 操作。
但问题是,例如,当创建一个新的post
时,它只创建了一次。但是在点击其中一个分页链接之后。它创建了两次。如果我第三次点击添加新的post
,就添加了三次
删除也是一样(即点击三个分页链接会出现三次确认window)
请注意,分页未使用 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 %>
posts/_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 %>
posts/_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 %>
posts/create.js.erb
$(".form_wrapper").html("<%= escape_javascript(render 'posts/form_ajax') %>");
$(".posts_wrapper").html("<%= escape_javascript(render 'posts/post', posts: @posts) %>");
您是否尝试关闭 turbo-links?我注意到有时它不会与一些 javascript 文件 gem 文件,application.js 文件摆脱 //=在你的 应用程序文件 中需要 turbolinks 并在你的 [=12] 中注释掉 gem 'turbolinks' =]gem文件,然后重新捆绑