レールでクリーンな URL を作成するために gem を使用することはできません。代わりに、独自の実装を展開しています。routes.rb に次のエントリを作成しました
match "/:slug" => "cleanurls#index"
cleanurl は、そのようなすべてのリクエストを処理するためのコントローラーです。cleanurl コントローラーで:
class CleanurlsController < ApplicationController
def index
slug = params['slug']
url = Url.where(:slug => slug).first
case(url.url_type)
when 'profile'
user_id = url.id.to_i
@profile = Profile_info.getProfileDetails(user_id)
render '/profiles/index'
end
end
end
、(関連する場合)および.urls
を格納するテーブルを作成しました。今はプロファイル ページしかありませんが、将来的にはきれいな URL を持つさまざまな種類のページを作成する予定です。slug
id
type of page
私の最初の質問:
1) この実装は正しいアプローチですか? テーブルにすべての適切なインデックスがある場合、パフォーマンスの観点からこれは問題ありません。
私はこのようなプロファイルのURLを作っています:
def self.makeProfileUrl(id,name)
name = name.strip.titleize
extension = User.where(:name => name).count - 1
slug = name.split(" ").join("-")
if extension != 0
slug += "-#{extension}"
end
Url.create(:slug => slug, :id => id.to_i, :url_type => 'profile')
end
同じ名前を共有するユーザーの場合に備えて、拡張機能を使用してカウントを追加しています。
質問:
これはスラッグを作成し、それが一意であることを確認する正しい方法ですか? 他のテーブルから名前の数を取得するのは正しくないようです。