2016-06-22 113 views
0

我試圖讓我的Rails應用程序忽略來自比另一個控制器動作以外的任何HTTP請求。舉例來說,假設我有我的控制器動作:忽略來自瀏覽器在Rails的HTTP請求4

class ChargesController < ApplicationController 
    before_action :set_charge, only: [:show, :edit, :update, :destroy] 

    def show 
    redirect_to edit_charge_path(@charge) 
    end 

    def edit 
    end 

    ... 

end 

我試圖讓行爲控制器接受來自showredirect,但會重定向誰在瀏覽器中輸入一些URL像http:\\www.mysite.com\charges\2\edit用戶地址窗口到其他位置(如'\'

+0

重定向簡單地做另一HTTP請求,在這種情況下,該編輯操作。 – Leito

回答

0

所以在你的控制器,你可以做

def show 
    respond_to do |format| 
    format.html {redirect_to "/"} 
    format.json { render json: @json } 
    end 
end 

,那麼你可以設置你的其他動作來請求JSON(或任何行吟詩人除此之外的HTML格式)。

+0

我嘗試了你的建議,但是它似乎也通過將它們路由到「/」來處理來自其他控制器操作的重定向。我正在尋找的是一種解決方案,它將導致在編輯時發生重定向時編輯「edit.html.erb」,而當某人在瀏覽器URL中輸入'\ charges \ n \ edit'時會生成'\'酒吧。 (另外,我不得不在'{}'中包含'redirect_to'\'' - 我使用的是Rails 4.2.6) – guero64

0

像@Leito說,瀏覽器會打你最初的控制器動作和Rails將響應無論是301還是302和Location頭,將告訴瀏覽器新的URL命中。所以這兩個請求都會來自瀏覽器。此外,我不相信第二個請求中存在標題或任何內容,可以讓您明確知道請求是重定向的結果。你可以看到,如果你的用戶被重定向

一種方法是爲他們設定一個cookie,當他們打你重定向控制器動作,然後檢查中,他們將被重定向到該路由的cookie。這會告訴你他們首先碰到重定向路線。那麼當然你必須刪除最後一條路徑中的那個cookie。

我認爲你應該看看其他的選擇第一,但因爲這似乎有點哈克。我敢打賭,你的問題有更好的解決方案。

相關問題