Meine Controller-Tests mit rspec schlägt fehl, während ich kaminari für die Seitennumerierung verwende. Mein Controller-Code und dieser Test sind wie folgt.
app / controller / courses_controller.rb
def index
@courses = Course.all.page(params[:page]).per(15)
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
spec / controllers / courses_controller.rb
describe "GET index" do
it "assigns all courses as @courses" do
course = create(:course)
get :index, { }
expect(assigns(:courses)).to eq([course])
end
end
AUSGABE:
Failures:
1) CoursesController GET index assigns all courses as @courses
Failure/Error: get :index, { }
ArgumentError:
wrong number of arguments (1 for 0)
# ./app/controllers/courses_controller.rb:5:in `index"
# ./spec/controllers/courses_controller_spec.rb:13:in `block (3 levels) in <top (required)>"
# -e:1:in `<main>"
Wenn ich jedoch nicht die Seitennummerierung im Controller verwende, funktioniert der Code, der keine Seitennummerierung verwendet.
def index
@courses = Course.all
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
Kannst du helfen, dieses Problem zu lösen? Vielen Dank im Voraus.
Antworten:
0 für die Antwort № 1Ich denke, du solltest entfernen all
aus der folgenden Zeile:
@courses = Course.all.page(params[:page]).per(15)
So sieht es aus:
@courses = Course.page(params[:page]).per(15)
Dies scheint eher im Einklang mit der Kaminari-Dokumentation:
To fetch the 7th page of users (default per_page is 25)
User.page(7)
To show a lot more users per each page (change the per_page value)
User.page(7).per(50)
1 für die Antwort № 2
Was @dax oben erwähnt hat, löste mein Problem inEiner der Controller, bei dem ich alle Kurse auswählte, aber in einem anderen Controller, wo ich verschachtelte Ressourcen verwendete, funktionierte das nicht. Ich folgte @ArupRakshit Kommentare und es funktioniert für jedes Szenario.
Unten ist die Lösung für das Problem.
Kaminari.paginate_array(Course.all).page(params[:page]).per(15)