1

URL で大文字にする方法に関係なく、ユーザーがユーザー名でアカウントにアクセスできるようにしようとしています。したがって、 http://example.com/Usernameはhttp://example.com/usernameと同じページに移動します。

URL の他の部分で大文字と小文字が区別されても問題ありませんが (それが標準であることはわかっています)、URL でユーザー名の大文字と小文字を正しくするようユーザーに強制する必要はないと思います。

これは、routes.rb ファイルだけに特定の設定を追加することで実行できますか?

これは簡単だと思っていましたが、どうやらそうではないようです。

ここで一見単純な質問を見つけましたが、役立つと思われる答えは1つしかなく、ハッキーすぎます(著者自身の承認による)

4

2 に答える 2

5

これはルーティングの問題ではなく、コントローラー コードで対処できると思います。

User.where("lower(username) = lower(?)", params[:username]).first!

また

User.where("lower(username) = ?", params[:username].downcase).first!

また

User.find(:first, :conditions => [ "lower(username) = ?", params[:username].downcase ])
于 2012-12-03T21:08:40.667 に答える
1

ルートではなくコントローラーでこの動作を処理すると、うまく機能するはずです。

# config/routes.rb
match ':username' => 'users#show'

# app/controllers/users_controller.rb
def show
  username = params[:username]
  user = User.find_by_username(username) || User.find_by_username(username.downcase) 
  # or something along these lines...
end

さらに優れた解決策は、常に小文字化され、URL ですぐに使用できるユーザーのスラッグIDを保存することです。その目的のために、素晴らしいFriendly_id gemを見ることができます。

于 2012-12-03T21:02:30.043 に答える