Моите контролни тестове, използващи rspec, се провалят при използване на kaminari за pagination.My Controller code & rspec тест са както са дадени по-долу.
ап / контролери / 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
спец / контролери / 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
OUTPUT:
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>"
Въпреки това, ако не използвам страницирането в контролера, което работи, по-долу е кодът, който не използва страницинацията.
def index
@courses = Course.all
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
Можете ли да помогнете да се справите с този проблем. Благодаря ви предварително.
Отговори:
0 за отговор № 1Мисля, че трябва да премахнете all
от следния ред:
@courses = Course.all.page(params[:page]).per(15)
Така изглежда така:
@courses = Course.page(params[:page]).per(15)
Това изглежда е в по - голяма степен в съответствие с Каминири документация:
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 за отговор № 2
Това, което споменахме по-горе @dax, разреши проблема миедин от контролера, където избирах всички курсове, но в друг контролер, където използвах вложени ресурси, това не се получи. Следвах @ArupRakshit коментари и работи за всеки сценарий.
По-долу е поправянето на проблема.
Kaminari.paginate_array(Course.all).page(params[:page]).per(15)