2012-08-02 2 views
0

현재 내 URL은 www.website.com/entries/1으로 표시되어 있습니다. www.website.com/title-of-entry으로 표시하고 싶습니다. routes으로 장난 꾸러기 였고 URL에 entry 제목을 표시 할 수 있었지만 Rails는 ID를 제공하지 않고 entry을 찾을 수 없습니다. 매개 변수와 함께 ID를 보내면 URL은 www.website.com/title-of-entry?=1으로 표시됩니다. URL에 매개 변수로 표시하지 않고 ID를 전달할 수 있습니까? 감사!URL을 게시물의 제목으로 지정하십시오.

답변

1

대부분의 것들과 마찬가지로,이 보석이 있습니다.

FriendlyID.

설치가 쉽고 몇 분 안에 설치가 가능합니다. 소용돌이 치다.

1

일반적으로이 부분을 데이터베이스 title-of-entry에 저장하려고합니다 (slug 또는 무언가를 호출하십시오). 이제 생성 된 경로는 다음과 같이

class Entry < ActiveRecord::Base 

    before_validation :set_slug 

    def set_slug 
    self.slug = self.title.parameterize 
    end 

    def to_param 
    self.slug 
    end 

end 

:

# instad of this 
@entry = Entry.find(params[:id] 

# use this 
@entry = Entry.find_by_slug(params[:id]) 

: /entries/title-of-entry

당신이 컨트롤러를 변경해야 해당 항목을 찾으려면 귀하의 모델은 다음과 같이 보일 수 있습니다 업데이트

몇 가지주의해야 할 점은

입니다.
  1. 당신은 그렇지 Entry.find_by_slug(params[:id])이 항상 발생이 슬러그와 첫 번째 항목을 반환합니다 slug이 고유한지 확인해야합니다.

  2. 예외는 발생하지 않지만 대신 nil을 반환합니다. Entry.find_by_slug!(params[:id])을 사용해보십시오.

  3. 경로를 /title-of-entry처럼 보이게하려면 나중에 문제가 발생할 것입니다. 항목 슬러그가 다른 컨트롤러의 이름과 동일하게 보이면 라우터에서 예기치 않은 결과가 발생할 수 있습니다.

+0

@Wukerplank에 대한 자세한 제안을 해주셔서 감사 드리며, 지난 밤에 나는 어지럽 혀 작업하기가 힘들었습니다. 나는 당신이 제안한대로 일할 수있는 시간을 보내고 해킹 할 수는 있었지만 확신 할 수는 있었지만 쉽게 할 수는 없었습니다. 슬러그/타이틀 문제를 다루면서, 나는 보석과 함께 갈 것입니다. 당신은 확실히 이것에 대한 upvote 자격이있어, 다시 한 번 감사드립니다! –

관련 문제