2017-12-01 23 views
0

나는 이미 kaminari gem을 설치했으며 내 rails 5 앱으로 잘 작동합니다. 페이지에 페이지를 새로 고치지 않고 Ajax을 통해 페이지 매김을 구현하려고합니다. 주석은 탭이있는 패널 안에 있습니다.레일스 5 : Kaminari gem with ajax setup

gem 'kaminari'

컨트롤러 액션

def show 
    @item = Item.find(params[:id]) 
    @comments = Comment.where(item_id: @item).order(created_at: :desc).page(params[:page]) 

    respond_to do |format| 
    format.js { render 'show.js.erb' } 
    format.html 
    end 
end 

show.js.erb

$("#pages-comments").html("<%= escape_javascript render(@comments) %>") 
$("#paginator").html("<%= escape_javascript(paginate(@comments, remote: true)) %>") 

show.html.erb

:

내가 지금까지 가지고있는 설정입니다
<div class="tab-pane" id="comments"> 
    <div class="pages-comments"> 
     <%= render 'comments/comment' %> 
     </div> 

     <div id="paginator"> 
     <%= paginate @comments, remote: true %> 
     </div> 

</div> 

그리고 비록 페이지 분할 링크를 클릭하면 다음 페이지로 리디렉션되지 않고 show.js.erb 파일이 렌더링되는 것처럼 보입니다. 또한 브라우저 검사기에서 오류가 발생하지 않습니다.

byebug 프로그램을 사용할 때 어떤 콘솔입니다 :

Rendering pages/show.js.erb 
    Comment Load (1.8ms) SELECT "comments".* FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2 [["LIMIT", 10], ["OFFSET", 0]] 
    (1.3ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    Shopper Load (1.2ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.2ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.3ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.2ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.4ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.2ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.5ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.3ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (0.3ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE Shopper Load (1.1ms) SELECT "shoppers".* FROM "shoppers" WHERE "shoppers"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.3ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    CACHE (0.2ms) SELECT COUNT(*) FROM (SELECT 1 FROM "comments" WHERE "comments"."item_id" = 8 ORDER BY "comments"."created_at" DESC LIMIT $1 OFFSET $2) subquery_for_count [["LIMIT", 10], ["OFFSET", 0]] 
    Rendered collection of comments/_comment.html.erb [10 times] (822.0ms) 
    (1.0ms) SELECT COUNT(*) FROM "comments" WHERE "comments"."item_id" = 8 
    Rendered pages/show.js.erb (1205.3ms) 

내가 잘못 일을 할 수있는 무엇을 어떤 아이디어가?

업데이트 1 @Gabbar 대답을 implemnting 후 나는 다음 페이지를 클릭 할 때 내가 얻을이 :

Started GET "/show/8?page=2" for 127.0.0.1 at 2017-12-01 16:51:39 +0200 
Processing by PagesController#show as JS 
    Parameters: {"page"=>"2", "id"=>"8"} 
    Item Load (0.5ms) SELECT "items".* FROM "items" WHERE "items"."id" = $1 LIMIT $2 [["id", 8], ["LIMIT", 1]] 
Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.5ms) 



TypeError (no implicit conversion of Integer into String): 

app/controllers/pages_controller.rb:33:in `+' 
app/controllers/pages_controller.rb:33:in `show' 
+0

레일에는 벌래 같은 것이 없습니다. 당신의 질문에 byebug로 바꾼다 –

+0

만약 컨트롤러가 params [: page] 컨트롤러에서 증가시킬 필요가 없다면, 매우 Ajax 요청 후에 증가하는 경우 컨트롤러의'params [: page]'값을 확인할 수 있습니까? + 1' – Gabbar

+0

@Aniket Shivam Tiwari의 답장을 보내 주셔서 감사합니다. 나는 그저 오타가 'byebug'이라는 것을 알게되었습니다. 나는'byebug'을 사용하고 있습니다. – Theopap

답변

1

당신은 show.js.erb이

def show 
    params[:page] ||= 1 
    @item = Item.find(params[:id]) 
    @comments = @item.comments.order(created_at: :desc).page(params[:page]) 
    #if params[:page].class == String 
    #params[:page].to_i = params[:page].to_i + 1 
    #else 
    #params[:page] = params[:page] + 1 
    #end 
    respond_to do |format| 
    format.js { render 'show.js.erb' } 
    format.html 
    end 
end 

을 시도 할 수 있습니다

$(".pages-comments").html("<%= escape_javascript render(@comments) %>"); 
$("#paginator").html("<%= escape_javascript(paginate(@comments, remote: true)) %>"); 
+0

콘솔에서 오류가 발생했습니다. 내 질문에 오류가 있습니다. 오류로 업데이트했습니다. 감사합니다. – Theopap

+0

params [: page] .to_i + = 1. to_i'이 33 행으로 바뀝니다. – Gabbar

+0

@Theopap 응답에서 수정을 확인하고 시도하십시오 – Gabbar