2010-01-30 2 views
1

게시물 모델이 있습니다. 마지막 게시물 'Post 24'를 삭제할 때 다음 게시물에서 Post 24의 ID를 가져오고 Post 25는 표시하지 않겠습니다.레일스에서 ​​삭제 된 모델 ID 번호를 다시 사용하려면 어떻게해야합니까?

ID를보기에 표시하고 싶지만 누락 된 숫자는 원하지 않습니다. 어떻게해야합니까?

도움 주셔서 감사합니다.

+1

참고 : SQL 응답을 요청할 때 사용중인 유형 (mysql, sqlserver, oracle 등)을 명시하는 것이 도움이됩니다. –

답변

5

id의 목적은 내부 식별자 이상일 수는 없습니다. 공개적으로 사용해서는 안됩니다. 이것은 Rails가 아니라 데이터베이스 문제입니다. MySQL은 앱에서 매우 심각한 합병증을 유발할 수 있기 때문에 ID를 회수하지 않습니다. 레코드가 삭제되면, 그 레코드의 id는 영원히 남겨 지므로, 미래의 레코드는 오해되지 않습니다.

그러나 원하는대로 할 수있는 방법이 있습니다. 대신 position 정수 열을 원한다고 생각합니다. 모델/테이블에 추가 한 다음 acts_as_list plugin을 설치하십시오. 어떤 순서로,

class Post < ActiveRecord::Base 
    acts_as_list 
end 

지금 귀하의 게시물 모델의 position 열이 자동으로 추적합니다 :

script/plugin install git://github.com/rails/acts_as_list.git 

그런 다음 모델에 "훅"을 추가 :

하면을 평소와 다름없이 설치 갭. 그렇게 선택하면 재주문을위한 편리한 방법을 제공합니다.

+0

+1 이것은 acts_as_list를 사용하는 것을 포함하여 질문을 읽는 것과 정확히 같은 대답입니다. –

+0

아하 .. 내 기록 보관소 란에 게시물 번호를 표시하고 싶었습니다. 제안 해 주셔서 감사합니다. –

+0

이미 다른 정수 열을 사용하거나 위치를 지정하지 않으려면 "acts_as_list : column => 'archive'"매개 변수를 사용하여 후크를 호출 할 수 있습니다. –

0

반대로, 당신은 SQL이 자체 작업을 수행 할 수 있습니다 : 이것은 당신이 말한 것처럼 하나를 건너 뛰는없이 각 행에 번호를 추가합니다

SELECT rownum AS id, [whatever other columns you want] 
FROM posts_table 
WHERE [conditions] 
ORDER BY [ordering conditions] 

.

참고 : Oracle을 사용합니다. 나는이 정확한 코드가 다른 맛에서 작동하는지 모르겠습니다.

관련 문제