2015-03-25 4 views
0

Я новичок в Ruby on Rails. Я пытаюсь научиться использовать Ajax с Rails. Пока все хорошо, я делал базовые операции CRUD с помощью Ajax.Rails - Ajax срабатывает более одного раза при использовании will_paginate

Но проблема заключается, например, при создании нового post, он создается только один раз. Но после нажатия на одну из ссылок на страницы. Он создается дважды. Если я нажал в третий раз и добавил новый post, он добавляется три раза.

То же самое с удалением (т.е. окно подтверждения представлен три раза, если щелкнуть на три постраничных ссылках)

Обратите внимание, нумерация страниц не использует 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) %>"); 
+1

Вы пытались отключить турбо-ссылки? Я заметил, что иногда это не jive с некоторыми файлами javascript ---------------- ** gem file, application.js file ** избавиться от '// = require turbolinks' в ваш файл приложения и закомментируйте 'gem 'turbolinks'' в вашем файле gem, затем восстановите – kkomaz

+0

@kkomaz Yup! Это было из-за турболинков. Большое спасибо. Пожалуйста, напишите свой ответ, чтобы я мог его принять. –

+0

рад, что все получилось :) – kkomaz

ответ

1

Вы пытались отключить турбо-ссылки? Иногда я заметил, что это не джайв с некоторыми файлами JavaScript гем файла, application.js файла избавиться от // = требуется turbolinks в вашем файл приложение & Закомментируйте Gem «turbolinks» в ваших gem file, затем rebundle

Смежные вопросы