문제

사용자에게 블로그 게시물을 통해 임의의 순서로 페이지를 페이지에 올릴 수있는 기능을 제공하고 싶습니다.

나는 이것을 구현할 수 없다 :

@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'

이후 :order 매개 변수는 모든 쿼리와 함께 호출되므로 블로그 게시물을 반복 할 위험이 있습니다.

이것을하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

Rand는 MySQL에서 씨앗을 수락합니다.

RAND(N) 

로부터 MySQL 문서:

rand (), rand (n)

범위 0 <= v <1.0에서 임의의 부동 소수점 값 v를 반환합니다. 일정한 정수 인수 n이 지정되면 종자 값으로 사용되며, 이는 반복 가능한 열 값을 생성합니다. 다음 예에서, Rand (3)에 의해 생성 된 값 순서는 그것이 발생하는 두 곳과 동일하다는 점에 유의한다.

다른 데이터베이스에는 비슷한 기능이 있어야합니다.

당신이 사용하는 경우 같은 Rand를 호출 할 때마다 시드는 요청에 따라 일관되게되며 그에 따라 페이지를 찍을 수 있습니다.

그런 다음 사용자 세션에 시드를 저장할 수 있으므로 각 사용자는 고유 한 결과 세트를 볼 수 있습니다.

다른 팁

각 페이지 (새 요청에서 생성 된)를 피하려면 반복 된 게시물이있는 경우 여러 요청을 통해 게시물의 주문을 저장해야합니다.

각 사용자가 고유 한 임의의 순서를 갖기를 원한다면 세션 배열에 주문을 저장하십시오.

모든 사용자가 동일한 임의의 순서를 가진 사람이 신경 쓰지 않으면 게시물 테이블에 위치 열이 있습니다.

@posts를 채우는 원래 쿼리의 order => random ()을 할 수 있습니다. 그런 다음 Pagination에서는 주문을 지정하지 마십시오.

a 이름이 지정되었습니다 임의의 동작을 캡슐화하는 게시물 모델에서 :

class Post < ActiveRecord::Base
  named_scope :random, :order => 'RANDOM()'
  .
  .
  .
end

당신의 PostsController 코드는 다음과 같습니다.

@posts = Post.random.paginate :page => params[:page]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top