我如何为多个控制器路由方法 rails 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 该操作:

<%= link_to "Logout", log_out_path %>

使用 URL 助手可确保您的代码使用正确的路由,即使您稍后更改 routes.rb 中的实际路径也是如此。