2011-07-01 3 views
0

페이지 자원이 있고 특정 인스턴스에 id = 5 및 permalink = foobar가 있다고 가정 해 보겠습니다.레일에서 생성 된 편안한 URL 헬퍼를 덮어 씁니다.

resources :pages 나는 "/ pages/5"URL을 출력하는 <%= link_to @page.title, @page %>을 사용할 수 있습니다.

"/ pages/foobar"대신 어떻게 출력할까요? 편집 URL과 마찬가지로 ... edit_page_path(@page) 출력을 "/ pages/foobar/edit"로 만들려면 어떻게해야합니까?

UPDATE

답변 지금까지 좋은 출발이다 Page.rb에 to_param를 재정의 말했다. 각각 +1하십시오. 그러나 <%=link_to @page.title, @page%>에 "/ pages/: permalink"가 아닌 "/ : permalink"를 출력하려면 어떻게합니까? 나는 그 대답을 받아 들일 것입니다.

답변

1

퍼머 링크를 사용하고 싶습니다.

는 모델이 추가 :

class Post 

    def to_param 
     "#{id}-{title}" 
    end 

end 

이것은 당신이 제목을 가지고 있다고 가정합니다.

당신이보고 싶은이 permalink-fu을 찾아 얻거나 그것이 당신의 자신을 실제로 정말 간단되면 저장 후 :

클래스 포스트

before_save :manage_peramlink 

def manage_peramlink 
    permalink = "#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}" 
end 

def to_param 
    "permalink" 
end 

확인 모델에 필드로 peramlink을 추가합니다.

3

모델에서 to_param 메소드를 덮어 쓸 수 있습니다. 그러면 레일스가 라우팅에 기본 키 대신 사용할 것을 알려줍니다. 예를

class Page 
    def to_param 
    "#{self.id}-#{self.title.parameterize}" 
    end 
end 

를 들어

는 매개 변수화 호출이 중복 된 제목이 경우에 권장합니다, 당신은 또한 self.id의 사용을 알 수 있습니다, 제목 URL이 친절합니다.

+0

아 멋지다. 하지만 ... "/ pages/: permalink"가 아닌 "/ : permalink"가되도록 페이지 경로를 지정하려면 어떻게합니까? – tybro0103

+0

'config/routes.rb' 파일에서 커스텀 라우트를 만들어야합니다. 예 : 'match/: permalink'=> pages # show' (내 머리 꼭대기에서 벗어남) – basicxman

+0

그렇지만 도우미가 URL을 그런 방식으로 생성하게하려면 어떻게해야합니까? – tybro0103

관련 문제