1

私は、ユーザーが登録なしで投稿を追加できるRailsアプリケーションに取り組んでいます。ランダムで一意のキーを生成し、投稿を編集するためのリンクを提供したいと思います。例:http: //mygreatapp.com/post/edit/f7smSDf34Sad。同様のアプローチがCraigslistによって使用されています。

私のアイデアは、投稿の作成時にランダムで一意の文字列を生成し、他の投稿データと一緒にデータベースに保存することでした。次に、データベースの文字列がリクエストの文字列と一致するかどうかを確認します。ソリューションは安全ですか?

どのように実装しますか?

編集:回答ありがとうございます。ただし、ランダムな文字列の生成は問題ではありません。安全性とデータベースへの実装が私の関心事です。

4

2 に答える 2

1

これを実装する場合は、friendly_id gemを使用します。これは、基本的に、DB内のレコードごとに一意のスラッグを作成するためです。friend_idは、デフォルトで列を使用してスラッグを作成します。idこの列を使用するようにfriendly_idに指示してから、それらのnormalize_friendly_idメソッドをオーバーライドすることができます。

そのメソッドでは、一意の文字列を生成してから返します。このメソッドによって返されるテキストは、friendly_idがスラッグを生成するために使用するものです。

スラッグを生成するには、MD5ハッシュを使用するか、次のようにすることができます

(0...50).map{ ('a'..'z').to_a[rand(26)] }.join

スラッグを自分で作成/保存する代わりにこのアプローチを使用する利点は、行う必要がないことです。friendly_idはスラッグによるレコードの検索を処理するため、Post::find_by_slug(slug)引き続き使用できます。Post::find(slug)

friend_idgemをカバーするRailscastsエピソードがあります

于 2012-05-31T15:29:43.110 に答える
0

私は自分のアプリでそのようなものを使用しています(to_paramはルートを生成するためにコントローラー/ビューによって呼び出されます)

class Post < AR::Base
  def to_param
    Digest::SHA1.hexdigest("--#{self.if}--#{self.created_at}--")
  end
end

唯一の問題は、SHA1が長い文字列を生成することです。代わりにMD5を使用できます...

于 2012-05-31T15:34:21.170 に答える