2013-01-11 39 views
0

我寫使用Rails 3,服務主要是提供了一些API的方法服務,但也有一些特殊的網絡頁面爲最終用戶提供友好的界面 - 這些網站的頁面基本上都是「封面「用於API。軌redirect_to的模擬

所以我需要做的就是讓一個小的編碼在CoverController,然後重定向到API方法(不同的控制器)。此方法需要通過POST調用,因爲它包含一些最終用戶不應該看到的明智信息(例如訪問令牌)。

據我瞭解HTTP標準是不可能通過POST重定向,但我需要調用的方法在鄰近類只是另一個功能!有沒有一種方法可以通過一切方式(params等)正確設置,好像它是從瀏覽器調用的?或者我應該只使用Net::HTTP::Post並自稱?

回答

0

你可以調用方法: #在控制器

# action 1 
def action1 
    ... 
    action2 
end 

# must be called via post 
def action2 
    ... 
end 

這個當然,假設動作2可以使用傳遞給操作1.現有PARAMS列表,否則,你也可以填滿它。

+0

這很棒,但似乎像GET一樣工作 - 可以在瀏覽器中查看URL中的所有參數。 在我的情況'action2'是從另一個控制器,所以我這樣稱呼它 'ApiController.action2' – xaxa

0

我認爲你在想錯誤的方式。 Rails 3非常好,您可以調用操作,結果基於您調用操作的方式。

小例子:一個API以返回當前時間:

def gettime 
    @time = new Date 
    # and do all other important stuff 
    respond_to do |format| 
    format.json { render json: @time } 
    format.html { render 'gettime' } # renders gettime.html.erb 
    end 
end 

如果調用作爲API,它返回一個JSON對象。如果從瀏覽器調用,它將返回一個html頁面。這樣你就不會複製代碼,並遵守操作是用戶啓動的規則,或者在另一個操作之後重定向。

另外其他開發人員會理解你的代碼,它將被完全放置在它所屬的位置。

順便說一句:沒有這樣的事情,通過使用後'隱藏'明智的參數。任何瀏覽器都會以一個快捷方式顯示此信息

+0

你舉的例子是好的,而你有用戶行爲和代碼之間的一個一一對應。假設我們有一個API方法需要以三種不同的方式調用;或者需要在一行中調用兩個API方法的一個操作。 我可以將代碼移動到Model,但它不完全是我想要的,並且不太靈活。 隱藏參數我的意思是從服務器端調用API方法,我可以設置合理的參數,最終用戶不會看到它們(因爲它們設置在服務器上),除非它們成爲URL的一部分並且可以看到在呈現視圖中。 – xaxa