ID で終わるページにルーティングするにはどうすればよいですか?
E.G.
before: site.com/messages/8
after: site.com/messages/terrytibbs
私はもう試した:
match "/messages/:username" => "messages#id"
これまでのところ運がありません。数字を現在のユーザーが話しているユーザーのユーザー名に置き換えることで、URLをもう少し意味のあるものにしようとしています。
敬具
ID で終わるページにルーティングするにはどうすればよいですか?
E.G.
before: site.com/messages/8
after: site.com/messages/terrytibbs
私はもう試した:
match "/messages/:username" => "messages#id"
これまでのところ運がありません。数字を現在のユーザーが話しているユーザーのユーザー名に置き換えることで、URLをもう少し意味のあるものにしようとしています。
敬具
ルートなどを変更せずに単純なものが必要な場合は、次のようにしてください。
class Message
def to_param
"#{id}-{username}"
end
...
end
メッセージにユーザー名属性があると仮定します。これにより、URL は次のようになります。
site.com/messages/8-terrytibbs
これは次の理由で機能します(irbで言う):
"8-terrytibbs".to_i => 8
レールがコントローラーでメッセージを検索すると、idパラメーターに対して同じことが行われます。
編集: ここに優れた Railscast があります: http://railscasts.com/episodes/63-model-name-in-urlとここに更新されたバージョン: http://railscasts.com/episodes/63-model-改訂された URL 内の名前
Friendly_id gemを見てください。必要なものだと思います。
FriendlyId は、Ruby on Rails のスラッギング プラグインとパーマリンク プラグインの「スイス アーミー ブルドーザー」です。これにより、きれいな URL を作成し、Active Record モデルの数値 ID であるかのように、わかりやすい文字列を操作できます。
FriendlyId を使用すると、アプリケーションで次のような URL を簡単に使用できます。
http://example.com/states/washingtonそれ以外の:
http://example.com/states/4323454
ルートが正しく設定されているため、正しいパラメーターを使用するようにコントローラーを変更する必要があります。
MessagesController が次のことを行うと仮定します。
def id
User.find(params[:id])
end
への変更:
def id
User.find_by_username(params[:username])
end
ユーザー名にインデックスを追加することもお勧めします。
次のように、ルートがコントローラーの適切なアクションを指していることを確認する必要があります。
これが指すアクションの名前showが であるとします。ルートを定義する方法は次のとおりです。
match 'messages/:username' => 'messages#show'
次に、 に移動するとmessages/8、params[:username]が設定され'8'ます (パラメータは常にString's.
同様に、 に移動するとmessages/terrytibbs、params[:username]が に設定され'terrytibbs'ます。
Rails Routing Guide の Chapter 3-3.5 を読んでみてください。これは、あなたがしようとしているようにパラメータをルートにバインドする方法の概要を提供します。