我如何为多个控制器路由方法 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_path
和 log_out_url
)自动创建 URL 助手,您可以在视图和控制器中使用这些别名来 link 该操作:
<%= link_to "Logout", log_out_path %>
使用 URL 助手可确保您的代码使用正确的路由,即使您稍后更改 routes.rb
中的实际路径也是如此。
我的 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_path
和 log_out_url
)自动创建 URL 助手,您可以在视图和控制器中使用这些别名来 link 该操作:
<%= link_to "Logout", log_out_path %>
使用 URL 助手可确保您的代码使用正确的路由,即使您稍后更改 routes.rb
中的实际路径也是如此。