id ではなく uuid でアクセスすべく、とりあえず uuid を自動入力するようにした。今回はこの uuid を使用して実際にアクセスできるように各所を変更してみる。
まずは、コントローラの各アクションでデータベース検索している
Event.find(params[:id])
の部分。通常だと params[:id] は、1 からインクリメンタルにセットされる id がセットされている(両方とも id だが、前者はURLで指定されるもので、後者はテーブルのフィールド)が、ここが uuid に変わるため、uuid が params[:id] になっているデータを検索するように変更する必要がある。そのような場合の検索方法は以下の通り
Event.find(:first, :conditions => ["uuid = ?", params[:id]])
これで uuid をキーに検索できるようになる
次に、各テンプレートの最下行等に表示される、"Edit" 等のリンク先の変更を行う
まず、"Show" へのリンクだが、通常は @event となっている link_to の第二引数を
{:id => @event.uuid, :action => "show"}
に変更する。"Destroy" も同じだ。
次に、"Edit" へのリンクだが、通常は edit_event_path(@event) となっている部分を
edit_event_path(@event.uuid)
に変更する。
なお、app/view/events/index.html.erb においては、for 文で回しているので、@event の部分は event になる。
新規作成や修正のアクション(create/update)は、実行後に redirect_to で表示(show)のアクションに飛ぶが、これも変更が必要である。これも、先ほどの "Show" へのリンクの変更と一緒で
:id => @event.uuid, :action => "show"
に変更する。
あと一つ変更すべき場所がある。それは、修正時のページ中の form 文だ。
form の action にも id が渡されるので、これを uuid に変更する必要がある。
対応する箇所は app/view/events/edit.html.erb の form_for の部分だ。通常は @event になっている箇所を以下のように変更する。
@event, :url => {:action => :update, :id => @event.uuid}
これで、一通りイベントに対するアクションを id から uuid をキーに行えるようになった
0 件のコメント:
コメントを投稿