一個簡單的反向鏈接:
link_to 'Back', :back, class: "btn btn-primary"
應該在這種情況下做的。它將使用HTTP_REFERER
或Javascript函數來轉到上一頁。有關更多信息,請參閱documentation。
更新:
我你需要一些例外「簡單的反向鏈接」的規則,你必須創建一個定製的解決方案。一種這樣的解決方案可能是,默認情況下使用link_to :back
,但通過在特殊情況下接受自定義「back_path」參數來覆蓋它。你可以創建一個自定義幫手來做到這一點。
以下示例默認使用標準後鏈接,但允許上一頁設置back_link
幫助程序將會理解的參數back_path
。
# application_helper.rb
def back_link(params, name: "Back", class: "btn btn-primary")
if params[:back_path].present?
link_to name, params[:back_path], class: class
else
link_to name, :back, class: class
ens
end
現在,您使用的鏈接通常在您的看法:
<%= back_link(params) %>
而當你想要覆蓋默認行爲,簡單地傳遞back_path
PARAM。您通常會在要返回的頁面上傳遞此參數。然後,您必須通過所有更多頁面和/或重定向傳遞此參數。
說,對於非簡單的例子,從客戶show
頁面,您可以點擊一個鏈接來創建一個新的發票,然後被重定向到發票show
頁面,並從那裏,你要點擊後面的鏈接,並得到再次向客戶端show
頁面發送。
所以,添加一個鏈接到客戶端顯示一個頁面,使用back_path
PARAM回指向此頁面:
# views/clients/show.html.erb
<%= link_to 'New invoice', new_invoice_path(@client, back_path: client_path(@client)) %>
在new
頁面表單,你必須添加一個hidden_tag
轉嫁back_path
PARAM:
# views/invoices/_form.html.erb
<%= hidden_field_tag 'back_path', params[:back_path] %>
接下來,在控制器的create
行動,你也將有重定向時通過這個PARAM:
# controllers/invoices_controller.rb
redirect_to invoice_url(@invoice, back_path: params[:back_path])
最後,您現在可以使用back_link
助手來顯示正確的鏈接:
# views/invoices/show.html.erb
<%= back_link(params) %>
我知道這是醜陋的,但是這就是事情是這樣的......而且這不是一個理想的解決方案,通常你想當您瀏覽頁面時(從不同路徑進入頁面),該解決方案僅解決第一個後端鏈接時的後端鏈接層次結構。但我認爲這是建立在某種意義上的。
這是正常的,除了當一個新的發票創建時,我正在重定向到'show',所以從那裏連接回你回到'新的發票形式' – Aloalo