2011-07-18 35 views
0

我有一個名爲Project的模型,它是由公司存儲的信息的集合。該公司可以通過兩種方式創建項目。如何使用多個入口點進行RESTfully路由?

第一種是標準的RESTful方式 - 公司進入項目索引,然後單擊「新建項目」,創建時通過flash消息返回索引。

第二種是「快速創建」,可以在公司查看客戶檔案時訪問。從這裏開始,公司可以輸入一些基本信息,並將其發送到與該客戶端創建項目(客戶端在此自動指定)。

這兩個方案中的第二個方案有一個項目正在從客戶端/展覽中訪問。將這些數據發送到項目/創建通常會將公司路由到項目/索引,但我不希望這樣。在這種情況下,創建操作的意義不同在於某些字段的處理方式不同,重定向也不同。你會建議我做什麼?

  1. 在項目中構建替代「create_from_client」操作。
  2. 在客戶端構建一個'create_project'動作。
  3. 發送參數到projects/create並設置client_id並重定向到client/show(如果該參數存在)。
  4. 我不知道的其他東西。

謝謝!

回答

0

我只是將另一個動作添加到控制器'quick_create'或其他任何。你可以通過局部和參數來乾燥表單,以告訴如何渲染事物......這看起來似乎是最簡單的方法。

我有這個半理性(或是半非理性)掛起反對利用引用...

+0

我很想知道原因是什麼 - 爲什麼要利用引用鏈接來掛斷? – sscirrus

+0

虛假和一些瀏覽器以不同方式處理它是微不足道的。例如,IE在某些情況下不提供有效的推薦人。目前這些問題很可能已經被解決,但是經過多年的避免引用,很難改變我的習慣。 – jaydel

0

我ussualy添加隱藏referer場與當前的URL,然後重定向到它

例如

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

您可以從Request對象和叉子基礎上直接利用引薦,類似於如何redirect_to :back作品。

從爲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