为什么在定义了路由的情况下仍会出现Rails 7路由错误?

ybzsozfc  于 2022-09-21  发布在  Ruby
关注(0)|答案(4)|浏览(136)

我正在按照Michael Hartl的Rails教程来构建一个小型演示应用程序。我在注销时被困住了。这是我的路线。rb:

  1. Rails.application.routes.draw do
  2. resources :users
  3. get "/login", to: "sessions#new"
  4. post "/login", to: "sessions#create"
  5. delete "/logout", to: "sessions#destroy"
  6. # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
  7. # Defines the root path route ("/")
  8. root 'users#index'
  9. end

这是相关的控制器操作:

  1. def destroy
  2. log_out
  3. redirect_to root_url, status: :see_other
  4. end

这是定义LOG_OUT的会话帮助器:

  1. def log_out
  2. reset_session
  3. @current_user = nil
  4. end

下面是视图中的链接标记:

  1. <%= link_to "Log out", logout_path, data: { 'turbo-method': :delete } %></span>

Screenshot of error

当我点击注销链接时,我得到这个错误。预期行为:注销用户,重定向到登录屏幕。

我做错了什么?

我不知道是因为Turbo,还是Turbo安装正确。我已经在Gemfile中添加了gem‘turbo-rails’,然后运行了捆绑包,但没有任何效果。

7gyucuyw

7gyucuyw1#

对我来说,添加方法::Delete与Data-Turbo一起工作。

  1. <span>
  2. <%= link_to "Log out", destroy_user_session_path,method: :delete, data: { 'turbo-method': :delete } %></span>
cuxqih21

cuxqih212#

使用传递方法进行检查

<%=link_to“注销”,LOGOUT_PATH,METHOD::DELETE,DATA:{‘TURBO-METHOD’::DELETE}%>

<%=link_to“注销”,LOGOUT_PATH,方法::DELETE%>

8gsdolmq

8gsdolmq3#

您正在通过GET访问删除方法路线。你跑了吗?

  1. rails turbo:install

您可能希望在配置/devise.rb中通过GET而不是Delete更改注销

  1. # The default HTTP method used to sign out a resource. Default is :delete.
  2. config.sign_out_via = :get # <= change this from :delete to :get and remove the `method:` in your `link_to` helper

以下是参考资料:https://github.com/hotwired/turbo-railshttps://github.com/heartcombo/devise/issues/5439

snvhrwxg

snvhrwxg4#

您可以将link_to更改为button_to

  1. <%= button_to "Log out", logout_path, method: :delete %>

它不那么神奇,但更可靠,因为它使用的不是链接,而是表单(在正常生活中,点击链接是一个GET请求)

相关问题