2017-04-04 6 views
1

FriendlyID을 내 레일 앱에 설치했습니다. 나는이 문제에 대한 지침을 https://github.com/norman/friendly_id/issues/700 따라 갔고 첫 번째 옵션에 따라 이와 같은 링크를 변경했습니다.FriendlyID - 관리자 네임 스페이스의 기본 ID 사용

# before: admin_post_path(@post) 
link_to admin_post_path(@post.id) 

지금까지 너무 좋아, 그러나 나는 다음과 같은 오류를 얻을 _form를 제출하려고 할 때 나는 또한 제거했기 때문에이 발생 된 것으로 나타났습니다 디버깅 후

Couldn't find Post with 'id'=hello-world

Post.find에서. 친화적 인 방법, 그래서 :

그래서 내가 다시 넣어 모든 일하고 있었다. 이 여분의 쿼리를 set_post@post = Post.find(params[:id])을 유지하고 제거하는 방법이 있나요 : 당신이

Post Load (0.3ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`slug` = '1' LIMIT 1 
Post Load (0.2ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1 

알고하지만이 내 질문의 여기 자, 슬러그를 얻기 위해 사용되는 하나 개의 추가 쿼리를 생성? 프론트 엔드에서 친숙한 ID와 슬러그를 사용하여 링크가 작동해야하므로 관리자 네임 스페이스에만 적용되기를 바랍니다.

답변

0

FriendlyId의 find 메소드가 작동하도록 설계 되었기 때문에 두 가지 쿼리가 표시됩니다. 숫자 문자열의 경우 먼저 친숙한 찾기를 수행 한 다음 일반 찾기로 돌아갑니다.

the source (그리고 훌륭한 의견)을 보면 방법이 있다는 것을 알 수 있습니다. id을 "비우호적"으로 만들 수 있습니다.

Here's a list of things "불친절한"것으로 간주됩니다. 이 경우 정수 값에 자신을 params[:id]으로 돌려 추가 쿼리를 삭제할 수 있습니다 :

def set_post 
    @post = Post.find(params[:id].to_i) 
end 

또는, 당신은 또한 :id에 명시 적 find_by 방법을 사용할 수 있습니다 - 전부 FriendlyId 찾기 방법을 생략한다.

+0

조회 자체가 아닌 생성 된 링크에 문제가 있습니까? 내 말은, 슬러그는 실제 이드 대신 링크에서 사용되는 것입니까? op가 얻는 오류는''id '= hello-world'로 포스트를 찾을 수 없습니다. – Iceman

+1

@Iceman : 흠, 내가 아는 범위가 아닙니다. 그렇지 않으면 로그에서 '슬러그 ='1 '이 나오는 것을 보지 못할 것입니다. 그러나 슬러그 값 대신에 ... – gwcodes

+0

아니, 네 말이 맞아, 그냥 생각해. friendly_id와 비슷한 문제가있었습니다. – Iceman