簡體   English   中英

刪除后的Rails條件重定向

[英]Rails conditional redirect after delete

我試圖根據用戶來自哪里刪除后重定向。

這是事件控制器中的當前代碼:

def destroy
  @event = Event.find(params[:id])
  @event.destroy

  respond_to do |format|
    format.html { redirect_to events_url }
    format.json { head :no_content }
  end
end

我將其更改為此(感謝MrYoshiji):

format.html { redirect_to :back }

如果用戶要從“事件顯示”頁面以外的所有頁面刪除,則該方法有效。 因為您隨后在嘗試顯示剛刪除的記錄時遇到錯誤。

因此,我正在嘗試使用一個參數來告訴銷毀代碼重定向到何處。

我正在嘗試:

def destroy
  @event = Event.find(params[:id])
  @event.destroy
  @return_url

  respond_to do |format|
    format.html { redirect_to @return_url }
    format.json { head :no_content }
  end
end

但是,我不知道如何在顯示頁面的link_to中將@return_url作為參數傳遞。

    <%= link_to 'Delete', @event, params(@return_url => "some url"), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>

如何將url作為參數傳遞?

謝謝!!

更新1

我將事件控制器更改為此:

 def destroy
   @expense = Expense.find(params[:id])
   redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back)
   @expense.destroy

   respond_to do |format|
     format.html { redirect_to redirect_url }
     format.json { head :ok }
   end
 end

這將重定向回正確的頁面,“刪除事件”按鈕處於打開狀態-除非我在事件的顯示頁面上單擊該按鈕,否則。

重定向要顯示已刪除的記錄。

UDPATE2

好的,這適用於我的應用程序:

    redirect_url = (request.referer.include?("/events/#{@event.id}") ? events_url : :back)

感謝所有的幫助!

正如我所評論的,您可以執行以下操作:

def destroy
  @event = Event.find(params[:id])
  @event.destroy
  redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back)

  respond_to do |format|
    format.html { redirect_to redirect_url }
    format.json { head :no_content }
  end
end

(我不確定刪除后是否可以立即訪問@event.id ,否則請在設置redirect_url后銷毀它。

您認為:

<%= link_to 'Delete', event_path(@event, url), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %>

在這里,我將url變量作為參數傳遞給控制器​​。

在控制器中:

...
@return_url = params[:url]
...

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM