2017-05-08 59 views
0

我有一個插件,用於檢查每個頁面上的數據,類似於身份驗證。如果他們沒有至少一個數據條目,他們會被重定向到一個頁面以添加數據條目。問題是,即使它們在該頁面上,它也會繼續重定向它們。我仍然需要檢查每個頁面上的數據,但是如果它位於特定頁面上,則跳過重定向。我試過管道,但它似乎矯枉過正,因爲我只需要跳過一塊執行(重定向)。跳過某個控制器/操作的重定向的最佳方式是什麼?在特定頁面上跳過部分執行

插件

def add_default_team(conn, user, opts) do 
    repo = Keyword.fetch!(opts, :repo) 
    default_team = user.default_team_id 

    if default_team do 
     assign conn, :current_team, repo.get!(Team, default_team) 
    else 
     conn 
     |> redirect(to: Helpers.team_path(conn, :new)) 
     |> halt() 
    end 
    end 

我試圖避免對重定向將是team_path路線(康涅狄格州,新)

+0

您可以檢查'conn'中的路徑,並且如果它與目標路徑匹配則不會重定向。你可以發佈一些代碼和更多關於你不想重定向的路線的細節嗎? – Dogbert

+0

是的,用每個頁面觸發的插件代碼更新 – humdinger

回答

1

可以檢查conn.request_path值,並跳過如果它匹配處理它某些字符串通過將現有的條款上面這一條款你有:

def add_default_team(%Plug.Conn{request_path: "/team/new"}, _user, _opts), do: conn 

這將是更好地使用path_info不過,因爲它刪除連續和尾部的斜線:

def add_default_team(%Plug.Conn{path_info: ["team", "new"]}, _user, _opts), do: conn 
相關問題