2011-07-18 4 views
0

私は、Projectというモデルを持っています。これは、会社によって保存された情報の集合です。この会社は2つの方法でプロジェクトを作成できます。複数のエントリーポイントでRESTfulにルーティングする方法は?

最初は標準のRESTfulな方法です - 会社はプロジェクトインデックスに行き、次に「新規プロジェクト」をクリックし、作成時にフラッシュメッセージでインデックスに戻します。

第2は、企業がクライアントのプロフィールを見ているときにアクセスできる「クイック作成」です。ここから、会社はいくつかの基本情報を入力して、これを送ってそのクライアントと一緒にプロジェクトを作成することができます(クライアントはここで自動的に指定されます)。

これらの2つのシナリオのうちの2番目には、クライアント/ショーからアクセスするプロジェクトがあります。このデータをプロジェクト/作成に送信すると、通常は会社をプロジェクト/インデックスにルーティングしますが、私はそれを望んでいません。この場合、特定のフィールドが異なる方法で処理され、リダイレクトも異なるという点で、作成アクションは意味が異なります。私は何を提案しますか?

  1. プロジェクトで[create_from_client]アクションを作成します。
  2. クライアントで「create_project」アクションを作成します。
  3. プロジェクトにパラメータを送信するか、client_idを作成して設定し、そのパラメータが存在する場合はclient/showにリダイレクトします。
  4. 他にも私が気づいていないことがあります。

ありがとう!

答えて

0

コントローラに「quick_create」などのアクションを追加するだけです。あなたは、部分とパラメータを使ってフォームを部分的に乾かして、物をレンダリングする方法を伝えることができます。これはちょうど最も簡単な方法のようです。

私はこの準合理的な(または準非合理的です)リファラを活用することにハングアップしている...

+0

私は理由が何であるか知りたいのですが、なぜリファラーを利用していないのですか? – sscirrus

+0

偽装するのは簡単ではなく、一部のブラウザで別の方法で処理します。たとえば、IEでは、特定のケースで有効なリファラーを提供しません。これらの問題は、この時点までに多分多分になってしまいますが、参照元を避けて何年も経ってからは、私の習慣を変えるのは難しいです... – jaydel

0

私はussualyどのredirect_to :backに似て、あなたはそれに基づいてRequest対象とフォークから直接リファラを活用できる例

def create 
    @project = Project.new params[:project] 
    @project.save 
    respond_with @project, :location => params[:referer] || [:index, :projects] 
end 
1

のためにそれに

をリダイレクトし、その後、現在のURLを隠しrefererフィールドを追加します働くredirect_toオプションのハッシュのためのRailsのAPIドキュメントから

:バック - 要求を発行したページに戻ります。 複数の場所からトリガーされるフォームに役立ちます。 redirect_toため 短期手(request.env [「HTTP_REFERER」])

だから、あなたは、単にこのような何かを行うことができます。

def create 
    @project = Project.new(params[:project]) 
    @project.save 
    respond_with @project, location: get_location! 
end 

private 

def get_location! 
    case request.env["HTTP_REFERER"] 
    # Your routing logic here. 
end 

これがあれば、あまりにも、いいとユニットテストに簡単ですあなたはその中にいる。 :)

context "if the user came from the regular form" do 
    before { controller.request.env["HTTP_REFERER"] = "regular_form_url" } 

    it "redirects to the index path" do 
    post :create 
    response.should redirect_to :index 
    end 
end 

context "if the user came from the quick-create form" do 
    before { controller.request.env["HTTP_REFERER"] = "quick_create_url" } 

    it "redirects to some other path" do 
    post :create 
    response.should redirect_to some_other_path 
    end 
end 
+1

ユニットテストを含めると+1: – sscirrus

関連する問題