특정 리소스에 대한 모든 레코드를 찾아 무작위 순서로 표시하지만 일관된 페이지 매김이 필요합니다 (페이징을 시작하면 동일한 레코드가 두 번 표시되지 않음). 표시 순서는 사용자가 페이지를 방문 할 때마다 무작위로 지정되어야합니다. will_paginate을 사용 중입니다. 어떤 충고? 당신이 RAND()
으로 이러한 RANDOMIZE 기능이 MySQL과 같은 데이터베이스를 사용하는 경우Rails 페이지 매김이있는 임의의 활성 레코드
답변
사용자 세션 쿠키에 임의의 숫자를 저장 한 다음 데이터베이스 임의 함수의 시드로 사용합니다. 이것은 사용자가 브라우저를 닫을 때까지 동일하고, 것, 따라서 그들은 모두 임의의 일관된 기록이 표시됩니다
cookies[:seed] = SecureRandom.random_number.to_s[2..20].to_i
사용 예를 들어,이 씨 :
큰, 임의의 숫자를 얻기를 MySQL은 :
SomeModel.all.order("RAND ?", cookies[:seed])
, 당신은 다음처럼 매김 쿼리에 그것을 추가 할 수 있습니다
Resource.paginate(... :order => "RAND()" ...)
체크 아웃 여기에 대한 의견의 일부를 성능 문제 : https://rails.lighthouseapp.com/projects/8994/tickets/1274-patch-add-support-for-order-random-in-queries
. 페이지를 변경할 때 (즉, 1에서 2로) 쿼리가 두 번 실행되고 중복 된 항목이 표시 될 수 있습니다 (1 페이지의 항목이 2 페이지에도 표시됨). –
각 페이지의 항목을 무작위로 원한다는 의미라고 생각했습니다. 이전에 열람 한 페이지를 세션 배열에 저장하고 다음 요청시이를 필터링 할 수는 있지만 실제로는 해킹하고 부서지기 쉬운 것처럼 보입니다. –
그래, 그건 아주 좋은 해결책 같지 않아. 나는 더 나은 것이 존재하지 않는다는 것에 약간 놀랐다. 이전에 http://sortfolio.com/과 같은 Ruby on Rails 응용 프로그램에서 구현 된 것을 보았습니다. –
이것은 내 지식에 표준이 아닙니다. 예를 들어 온라인 테스트에서이를 사용할 수 있습니다.
세션/사용자별로 목록을 사용하는 것이 좋습니다. 따라서 사용자가 처음 페이지로 이동하면 임의의 순서로 ID 목록을 결정하고이 목록을 사용하여 해당 사용자/세션에 대한 올바른 순서를 표시하는 모든 연속보기를 결정합니다.
행의 양이 제한되어 있기를 바랍니다. 예를 들어, 테스트의 경우처럼 말이됩니다. 또한 사용자가 완전히 끝내기 전에 테스트를 끝내면 중단 한 부분부터 계속할 수 있습니다. 그러나 아마도 그것은 당신과 관련이 없습니다.
희망이 도움이됩니다.
아직 도움이 필요한지 잘 모르겠습니다. 과거에 한 가지 해결책은 처음에는 RAND로 쿼리를 수행했지만 페이지 매김없이 수행하는 것입니다. 그런 다음 해당 레코드 ID를 저장하고 저장된 목록을 사용하여 조회하고 페이지 매김하십시오. 초기 RAND 쿼리는 페이지가 1이거나 nil 일 때만 실행되도록 설정할 수 있습니다. 그냥 생각.
아이디어를 제공해 주셔서 감사합니다.나는 이것을 오랫동안 보지 않았고 더 이상 어디에서 사용되었는지 기억할 수 없다! 나는 대답을 고맙게 생각한다. –
나는 종료 업 포스트 그레스에 나를 위해 일한이 솔루션이 작동하지 않습니다
session[:seed] ||= rand() # should be between [-1..1]
seed = session[:seed]
Product.select("setseed(#{seed})").first
Product.order('random()').limit(10).offset(params[:offset])
- 1. Ruby on Rails 활성 레코드 쿼리 레코드 계산
- 2. yii 제한 및 페이지 매김이있는 CActiveDataProvider
- 3. 상태 및 페이지 매김이있는 mysql 문제
- 4. 모델 연결순으로 정렬 된 활성 레코드 쿼리 : Rails 3 & SQLite
- 5. jQuery : 임의의 활성 탭?
- 6. 내비게이션 도우미 활성 레코드
- 7. 활성 레코드 저장소 삭제
- 8. codeigniter mysql 활성 레코드
- 9. 활성 레코드 란 무엇입니까?
- 10. MySQL의 활성 레코드 문제
- 11. 활성 레코드 table_exists? 구문
- 12. 활성 레코드 쿼리 DRYing
- 13. codeigniter의 활성 레코드 합계
- 14. Ruby on Rails 응용 프로그램에서 활성 레코드 세션을 얻으려면 어떻게해야합니까?
- 15. ruby on rails 3, 활성 레코드, 데이터 주소 지정 방법
- 16. Ruby on rails 활성 레코드 여러 그룹 레코드로 숫자 계산
- 17. Ruby on rails 활성 레코드 생성 Postgres의 SQL
- 18. 레일스 활성 레코드 : 레코드 목록 업데이트
- 19. 레일스 활성 레코드 ID 대 객체 ID + 활성 :: 관계
- 20. 이 SQL의 활성 레코드 구현?
- 21. 아음속 3.0 활성 레코드 업데이트
- 22. codeigniter, 활성 레코드, 문제가 있음
- 23. Yii의 활성 레코드 요소 재정렬
- 24. 활성 레코드 결과 제한 찾기
- 25. 레일스 활성 레코드 지속 문제
- 26. CodeIgniter, 활성 레코드, JOIN 도움?
- 27. 활성 레코드 합계 2 args
- 28. PHP : 활성 레코드 테이블 조인
- 29. 활성 레코드 - HasAndBelongsToMany가 작동하지 않습니다.
- 30. Yii에 BELONGS_TO가있는 관계형 활성 레코드
업데이트 : 방금 한 가지를 깨달았습니다. 임의의 시드를 URL의 일부로 만들어야 사용자가 북마크를 저장하거나 URL을 저장하면 페이지 매김이 중단되지 않습니다. 그런 다음 씨앗을 할 수 있습니다. || params [: seed] || session_seed – Houen