1

重複の可能性:
rubyを介してきれいなURLを作成する

周りを見回しましたが、答えが見つかりません。私は正しい質問をしていないか、正しい場所を探していません。

私は次のように定義しています:

config/routes.rb
resources :members

members_controller.rb
def show
@member = Member.find(params[:id])
end

現在、メンバーを表示する場合、URLはhttp://myapp.tld/members/1です。メンバーの名前がかっこいいとしましょう。http://myapp.tld/members/cooldude 、または可能であればhttp ://myapp.tld/cooldudeを表示するのはどれほど難しいでしょうか。

ご協力いただきありがとうございます。

4

1 に答える 1

3

私はfriendly_idをお勧めしますが、独自のソリューションをロールしたい場合は、これで始めることができます。

  1. slugモデルにフィールドを追加します
  2. slug保存する前にフィールドを設定する
  3. to_paramモデルをオーバーライドして、slug代わりにを返しますid

モデルを設定します。

# member.rb
before_save do
  self.slug = name.parameterize
end

def to_param
  slug
end

ファインダーを次のように変更します。

# members_controller.rb
def show
  @member = Member.find_by_name!(params[:id])
end

find_by_name!(バングを参照してください)はActiveRecord::RecordNotFound、を返すのではなく、例外を発生させることに注意してくださいnil。本番環境では、これにより404ページが自動的に表示されます。

ビューでは、の代わりにmember_path(@member)これが返されるようになりましたを使用できます。/members/cool-dude/members/1

ドキュメントをチェックしてください:

于 2012-10-15T02:56:21.360 に答える