문제

편안한 라우팅을 유지하면서 이와 같은 URL이있는 WordPress 슬러그와 비슷한 일을하려고합니다.

http://foo.com/blog/2009/12/04/article-title

RESTFul 라우팅을 유지하는 데 관심이있는 이유는 사용자 정의 경로를 사용하고 있기 때문에 많은 플러그인을 사용할 수 없기 때문입니다.

나는 이미 나머지 외관을 다음과 같이했다.

map.connect   '/blog/:year/:mon/:day/:slug',
              :controller => 'posts', :action => 'show',
                :year => /\d{4}/, :month => /\d{2}/,
                :day => /\d{2}/, :slug => /.+/,
                :requirements => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/, :slug => /.+/ }

링크를 작성하려면 적절한 URL을 생성하기 위해 Custom Link_to 도우미를 작성해야했습니다. 나는 정말로이 편안함을 만들고 link_to post_path (@post)가 위의 URL을 생성하고 link_to edit_post_path (@post) ... Article-Title/Edit

나는 또한 : has_many => [: 댓글] 그리고 나는 또한 작동하기도합니다. 내가 시도한 link_to는 다음과 같이 보입니다.

 'posts', :action => 'show', :year => recent_post.datetime.year.to_s,
            :month => sprintf('%.2d', recent_post.datetime.mon.to_i),
            :day => sprintf('%.2d', recent_post.datetime.mday.to_i),
            :slug => recent_post.slug %>

그리고 이것 (내가 원하는 것이 아님)을 생성합니다.

http://foo.com/posts/show?day=30&month=11&slug=welcome-to-support-skydivers&year=2009

내가 뭘 잘못하고 있는지 잘 모르겠습니다. 이것을 달성하는 것이 가능합니까?

도움이 되었습니까?

해결책

사용자 정의 경로를 사용하지 않기 때문에 작동하지 않는다고 생각합니다. 나는 항상 이것을한다. 간단한 사용자 정의 경로를 설정합니다.

map.present_page '/blog/:year/:month/:day/:slug',
          :controller => 'posts', :action => 'show'

그런 다음 할 수 있어야합니다.

present_page_path(:year => 2009, 
                  :month => "December", 
                  :day => "13", 
                  :slug => "just-an-example")

쿼리 문자열을받는 이유는 레일이 어떤 이유로 든 경로에 연결하지 않기 때문입니다. 명명 된 경로를 사용하면 Rails에게 해당 경로를 사용하도록 명시 적으로 지시합니다. 그것이 당신을 위해 그것을 해결하는지 알려주세요!

다른 팁

내가 이것에 대해 어떻게했는지 ...

먼저, 경로 생성 URL 방법을 사용하려고하지 않습니다. 또한 날짜 매개 변수의 형식을 확인하는 관점에서 귀하와 같은 정도로 가지 않습니다. Datestamps와 URL 작성을 자동으로 생성하고 있기 때문에 형식의 유효성에 대해 걱정하지 않으므로 ActivesUpport :: TimeWithZone 객체를 형식화합니다.

관련 경로부터 시작하겠습니다.

  map.post_by_date 'content/:year/:month/:day/:slug', 
                  :controller => 'posts',
                  :action     => 'show_by_date_slug'

인수 서식 또는 반복에 대해 걱정하고 싶지 않았기 때문에 도우미 방법을 만들고 관련 컨트롤러에 도우미를 포함 시켰습니다.

  def pubdate_slug_url(post)
    year   = post.published_on.strftime('%Y')
    month  = post.published_on.strftime('%m')
    day    = post.published_on.strftime('%d')

    url    = "/" + ["content", year, month, day, post.slug].join("/")

    return url
  end

마지막으로, 내 생각에, 나는 단순히 메소드를 호출하여 게시물 개체를 전달합니다.

  <h2><%= link_to post.headline, pubdate_slug_url(post) %></h2>

나는 다음과 같은 URL로 끝납니다. http://wallscorp.us/content/2009/12/06/links

건배.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top