私のアプリケーションでは、すべてのユーザーに対して次のようなバニティ URL を生成する必要があります: profilename/joinme で、プロファイル名は一意になります。プロファイル名が次のような既存のルートである場合、問題があります。したがって、これらのバニティ URL の作成時に、既存のルートに干渉しないことを確認したいと思います。それを行う簡単な方法はありますか?私が考えることができる1つの方法は、ファイル内の「レーキルート」のフォーマットされた出力を取得し、すべてのルートの作成時にその存在をチェックすることです.
2 に答える
3
禁止された単語のリストを作成し、検証を使用してユーザー名がこの単語のいずれにも一致しないことを確認する必要があります。簡単な方法は次のとおりです。
validate :check_banned_words
def check_banned_words
if %w( admin join login help register ).include? self.username
errors.add(:username, "this is a banned word!!")
end
end
禁止単語のリストが長すぎる場合は、yaml ファイルに入れるか、禁止単語専用のモデルを作成してください。そうすれば、アプリを再デプロイせずに新しい単語を追加できます。
于 2013-03-28T10:43:44.773 に答える
1
動的ルートを生成する代わりに、ルートで動的セグメントを使用できます。
例えば:
match ":username/joinme", :to => "users#joinme"
次に、必要に応じてコントローラーの動作をカスタマイズできます。
参考までに: Rails Routes - Dynamic Segments
また、新しいユーザーを作成するプロセスを制御して、既存のルートと競合する名前の使用を禁止する場合は、この回答で説明されているアプローチを使用できます。
于 2013-03-28T10:45:23.313 に答える