2011-01-22 16 views
1

私はState Machineとよく似たアプリケーションを開発しています。Railsアプリケーションのような状態マシンの更新アクションのランダムURL

"人物"を作成した後、属性が残っていますが、それはまだ "更新"アクションによって満たされなければなりません。

自分のモデルに "unique_token"関数を定義したので、人を作成して更新するときに、新しい一意の文字列が割り当てられます。

後で、私は "edit:"と "update"アクションのために自分のルートに "/:unique_token"を定義しました。

その後、私のコントローラでは、 "編集" と "UDPATE" のために、私は定義された:

@person = Person.find_by_unique_token(のparams [:unique_token])

しかし!

まだ更新アクションがIDを見つけようとしているため、エラーが発生します。

どうすればいいですか?

これにはより良いアプローチがありますか?

ありがとうございました。

+0

「更新アクションがIDを見つけようとしているため、エラーが表示されます」という意味を正確に説明できますか?個人IDのようなIDですか? – polarblau

+0

はい。更新呼び出しは引き続きコントローラ "person"、アクション "update"、id "params [:id]"の検索を試みます。私はその属性を必要としないので失敗します。 – maukoquiroga

+0

あなたはどこでそれを見つけるのが本当に何時起こりますか?このウィザードは別のアプローチです:http://railscasts.com/episodes/217-multistep-forms – apneadiving

答えて

1

すごい、のように簡単に:私は、これは誰にも役立つことを願っ

class PeopleController < ApplicationController 

    before_filter :authenticate_unique_token, :only => [:edit] 

    def authenticate_unique_token 
    person = Person.find_by_unique_token(params[:unique_token]) 
    if person.blank? || person.id != params[:id].to_i 
     raise "whatever" 
    end 
    end 

関連する問題