「/」とナメクジとRailsのRESTfulなルーティング
-
18-09-2019 - |
質問
私は似たようにRESTfulなルーティングを維持しながら、私はこのようなURLを持っているワードプレススラグを行うために探しています
http://foo.com/blog/2009/12/04/article-title
私はキープRESTfulなルーティングに興味を持っていた理由は、私は、カスタムルートを使用していますので、私は多くのプラグインを使用することができませんということです。
私はすでにと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を生成するためにカスタムのlink_toヘルパーを書かなければなりませんでした。私は本当にこのRESTfulなを作るとのlink_toのpost_path(@post)上記URLをもたらすとのlink_toのedit_post_path(@post)...記事タイトル/編集
を持っていると思います 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")
レールが何らかの理由であなたのルートへの接続を行っていないので、あなたは、クエリ文字列を取得している理由は、最も可能性が高いです。明示的に指定ルートを使用すると、そのルートを使用するようにレールを伝えます。それはあなたのためにそれを解決するかどうか、私に教えてください!
他のヒント
ここで私はこれについていった方法です...
まず、私はルート生成されたURLのメソッドを使用しようとしていませんよ。また、私は日付パラメータの書式設定を確認するという点で、あなたと同じ程度につもりはありません。私は、自動生成日付スタンプと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
最後に、私の見解では、私は単に私のPostオブジェクトに渡して、メソッドを呼び出します:
<h2><%= link_to post.headline, pubdate_slug_url(post) %></h2>
http://wallscorp.us/content:私のようなURLで終わります/ 2009/12月6日/リンクする
乾杯ます。