我有一個從 Rails 6 升級到 7 應用程式的 Rails 應用程式。在以前的版本中,我使用will_paginate gem (v. 3.3.1) 和 Bootstrap 3。現在我決定切換到pagy (v. 5.10.1)。我已按照遷移指南進行了必要的更改。我已經運行了本地服務器,一切正常。但是,我在集成測驗中測驗分頁時遇到問題。我已嘗試撰寫 API 檔案中所示的代碼,但我不斷收到錯誤訊息。我將不勝感激任何建議或指導,因為我是 Rails 的新手,并且很難弄清楚為什么它不能在測驗環境中作業,而開發中的一切都很好。提前感謝大家的時間和幫助,我非常感謝這里的社區。
以下是我的測驗和控制器的摘錄,為簡潔起見,我省略了一些部分。
user_following_test.rb
test 'feed on Home page' do
get root_path
@pagy, @user = pagy(@user.feed, page: 1).each do |micropost|
assert_match CGI.escapeHTML(micropost.content), response.body
end
end
# Previous code that worked with will_paginate
# test 'feed on Home page' do
# get root_path
# @user.feed.paginate(page: 1).each do |micropost|
# assert_match CGI.escapeHTML(micropost.content), response.body
# end
# end
end
users_controller.rb
class UsersController < ApplicationController
...
def index
@pagy, @users = pagy(User.where(activated: true))
end
def show
@user = User.find(params[:id])
@pagy, @microposts = pagy(@user.microposts)
redirect_to(root_url) unless @user.activated?
end
我打算檢查用戶控制器中的 show 方法是否按預期作業。運行測驗的結果是一個非常長的堆疊跟蹤,其結尾是:
Did you mean? pagy_t
test/integration/following_test.rb:60:in `block in <class:FollowingTest>'
uj5u.com熱心網友回復:
該pagy方法在默認配置中僅在控制器級別可用,而不是全域可用。您需要include Pagy::Backend在其他課程中使用它。
我認為以下方法可能有效:
include Pagy::Backend
test 'feed on Home page' do
get root_path
_pagy, microposts = pagy(@user.feed, page: 1)
microposts.each do |micropost|
assert_match CGI.escapeHTML(micropost.content), response.body
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/498035.html
