/ /どうすればRailsアプリケーションにバニティURLを実装できますか? -ruby-on-rails、url、routes、url-routing

Railsアプリケーションでvanity URLを実装するにはどうすればよいですか? - ruby​​-on-rails、url、routes、url-routing

ユーザーにプロファイルページを持たせたいsite.com/myNameHere。 Railsは「myNameHere」という名前のコントローラーを探します。 routes.rbを設定して、コントローラーが見つからない場合、「myNameHere」がパラメーターとして別のコントローラーに送信されるようにすることは可能ですか?

回答:

回答№1については9

次のようなルートを追加できます。

map.profile_link "/:username", :controller => "profiles", :action => "show"

以下のファイルで十分に低く追加してくださいリソースは、他のルートと干渉しません。最低の優先度でなければなりません。次に、idの代わりにユーザー名を使用するようにshowアクションを変更する必要があります。

def show
@user = User.find_by_username(params[:username])
end

これですべてです。ハッピーコーディング!

更新:

私はこの答えを完全なブログ投稿に拡大しました。 Ruby on RailsルートのバニティURL。追加のコードサンプルと詳細な説明があります。


回答№2の場合は0

Rails 3用にこれを更新すると思った。 ユーザーモデルにバニティルートとして機能するフィールド「website」があり、各バニティルートの静的ページにルーティングします。バニティルートが呼び出された場合、すべてのユーザーの「イベント」を表示したい。

#config/routes.rb
get "/:website", :controller => "static_pages", :action => "vanity"

#app/controllers/static_pages_controller.rb
def vanity
@user = User.find_by_website(params[:website])
if @user != nil #in case someone puts in a bogus url I redirect to root
@events = @user.events
else
redirect_to :root
end
end

#app/views/static_pages/vanity.html.erb
<h1><%= @user.website  %> events</h1>

<table>
<tr>
<th>Title</th>
<th>Starts at</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>

<% @events.each do |event| %>
<tr>
<td><%= event.title %></td>
<td><%= event.starts_at %></td>
<td><%= event.description %></td>
</tr>
<% end %>
</table>

gemを使いたくない場合、これは良い代替手段だと思います。