簡體   English   中英

我如何為多個 controller 導軌 6 布線方法

[英]How can i route a mothod for more than one controller rails 6

我在我的 routes.rb 中有這個

  get "invoices/log_out" => "users#logout", :as => "log_out"

這似乎只在localhost:3000/invoices/new/log_out ,因為當我在localhost:3000/invoices並單擊注銷時出現以下錯誤

No route matches [GET] "/log_out"

所以我想讓它在我所有的控制器中工作,有五個類似get "all_controllers/log_out" => "users#logout", :as => "log_out"

   <nav class="navi_me">
          <ul>
          <li><a href="/proms/add_prom">Εισαγωγη Προμηθευτη</a></li>
          <li><a href="/proms">Προμηθευτες</a></li>
          <li><a href='/items'>Προϊόντα</a></li>
          <li><a href='/items/insert'>Εισαγωγη Προϊόν</a></li>
          <li><a href='/invoices'>Τιμολόγια</a><li> 
          <li><a href='/invoices/new'>Εισαγωγη Τιμολόγιου</a><li>
          <li><a href='/pbinvoices'>Πιστωτικά Τιμολόγια</a><li>
          <li><a href='/pbinvoices/new'>Εισαγωγη Πιστωτικου Τιμολόγιου</a><li>
          <li><a href='/census'>Απογραφες</a><li>
          <li><a href='/users/setting'>User Setting</a></li>
          <li><a href="log_out">Αποσύνδεση</a></li>
        </li>
      </ul>
      </nav>
    ```

  def logout
    session[:user_id] = nil
    redirect_to users_login_path , :notice => "Logged out!"
  end 

查看您的路線:

get "invoices/log_out" => "users#logout", :as => "log_out"

當有人點擊localhost::3000/invoices/log_out時,它會將請求路由到您的UsersController上的logout方法。 將路徑部分更改為'all_controllers/log_out'除了更改路徑文本外,不會改變應用程序的任何行為。 這對您的問題並不重要,但由於注銷是一個單一的全局操作,您最好只使用'/log_out'作為路由路徑以保持簡單。

您沒有包含任何視圖代碼片段,但您的問題幾乎可以肯定在於您如何指定link_to 路由的:as => "log_out"部分定義了路由的別名。 Rails 使用別名( log_out_pathlog_out_url )自動創建 URL 助手,您可以在視圖和控制器中使用該別名鏈接到該操作:

<%= link_to "Logout", log_out_path %>

使用 URL 幫助程序可確保您的代碼使用正確的路由,即使您稍后更改routes.rb中的實際路徑。

暫無
暫無

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

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