Railsでトランザクショントークン(ダブルサブミット、2重登録対策)を使う

double_submit_protectionを使いましょう。
ただし、2008/9/11現在、sessionをクリアしていないというバグ?があります。なので、
http://github.com/DianthuDia/double_submit_protection/
な感じでgithubの使い方を学びながら軽く修正してみました。
インストールは

 script/plugin install git://github.com/DianthuDia/double_submit_protection.git

で行います。

使い方は、REAMME.txtにあるように、

View

<% form_for do |f|%>
....
<%=  double_submit_token %>
<% end %>

Controller

def create
  if double_submit?
    エラー処理
  end
  ...
end

な感じで使います。

追記

id:kelkronsoさんから、before_filterを使えばよいんじゃないかと提案を受けました。エラー処理が共通ならばそちらのほうが良いです。

filter使う場合

before_filter :double_submit?, :only=>[:create]
def create
  ...
end

もちろん、double_submit?内で例外処理を追記しないといけません。

def double_submit?
  session_token = session[SESSION_TOKEN_KEY]
  session[SESSION_TOKEN_KEY] = nil
  raise '二重登録です' if request.post? && (session_token != params[TOKEN_FIELD_NAME])
end