2017-01-07 2 views
2

Я создал раздел комментариев для своих просмотров сообщений, и у меня есть remote: true, работающий над формой, поэтому, когда вы нажимаете enter и отправляете ' новый комментарий "в базу данных, он обновляется в фоновом режиме (комментарий создается, страница не перенаправляет или не изменяет), но я не могу заставить его загружать комментарии на странице. Вы должны обновить страницу, чтобы увидеть их.Rails 4: перезагрузите страницу с помощью ajax после отправки удаленной формы другому контроллеру

Я мог бы сделать redirect_to :back в контроллере комментариев после сохранения, но это приведет пользователя к верхней части страницы, а не останется на месте, чтобы увидеть комментарий.

Я пробовал render 'posts#show' после сохранения комментария в контроллере комментариев, чтобы создать действие, но которое пытается отправить вас на /comments/posts/:slug/. Если бы на самом деле это показало, что сообщения показывают действие, я думаю, что это сработает.

Комментарии контроллер:

class CommentsController < ApplicationController 
    before_action :find_commentable 

    def show 
    end 

    def new 
    @comment = Comment.new 
    end 

    def create 
    @comment = @commentable.comments.new comment_params 
    @comment.author = current_user if current_user 
    @comment.save 
    end 

    private 

    def comment_params 
     params.require(:comment).permit(:body, :author_id, :post_id) 
    end 

    def find_commentable 
     @commentable = Comment.find(params[:comment_id]) if  params[:comment_id] 
     @commentable = Post.find_by_slug(params[:post_id]) if params[:post_id] 
    end 
    end 

Раздел комментариев на пост-шоу зрения:

%ul#post-comments 
    = render 'comment_feed' 

    = form_for [@post, Comment.new], remote: true do |f| 
    = f.text_field :body, class: 'js-new-comment-field', placeholder: "Write a comment..." 

сообщений/show.js.erb:

$("#post-comments").html("<%= escape_javascript render("comment_feed") %>"); 

routes.rb:

resources :posts do 
    collection do 
     match 'search' => 'posts#search', via: [:get, :post], as: :search # For ransack search 
    end 
    resources :comments 
    end 

    resources :comments do 
    resources :comments # Replies on comments 
    end 

ответ

0

Я добавил эту вторую линию матч к routes.rb и теперь это освежает страницу с новым комментарием:

resources :posts do 
    collection do 
     match 'search' => 'posts#search', via: [:get, :post], as: :search 
     match '/comments/posts/:slug' => 'posts#show', via: [:get, :post], as: :comment 
    end 
    resources :comments 
    end 

Это не АЯКС, хотя: demo

+0

сделали вы получили решение? – uzaif

+0

Пока еще немного не ближе. Я ничего не делаю на стороне сервера, поэтому, возможно, мне просто нужно выяснить, как ответить на запрос ajax с созданным им комментарием. Эта страница является полезной до сих пор http://guides.rubyonrails.org/working_with_javascript_in_rails.html –

+0

, пожалуйста, загляните в свою сетевую вкладку, это поможет вам – uzaif

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