簡體   English   中英

Rails 5:Kaminari gem與Ajax設置

[英]Rails 5: Kaminari gem with ajax setup

我已經安裝了kaminari gem並且可以在我的rails 5應用程序中正常工作。 在有評論的頁面上,我試圖通過Ajax實現分頁,因此無需刷新頁面。 注釋位於帶有選項卡的面板內部。

到目前為止,這是我的設置:

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答案后,當我單擊下一頁時,我得到以下信息:

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'

你可以試試這個嗎

 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

在show.js.erb中

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

暫無
暫無

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

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