【问题标题】:The action 'complete' could not be found for ApplicationController找不到 ApplicationController 的“完成”操作
【发布时间】:2016-12-02 08:29:02
【问题描述】:

我有这个错误:

AbstractController::ActionNotFound at /complete

无法为 ApplicationController 找到“完成”操作

我认为我正确设置了 routes.rb

get    :complete,                to: 'application#complete'

这是我的 application_controller.rb

class ApplicationController < ActionController::Base
 def complete
   ...
 end
end

感谢您的帮助:)

【问题讨论】:

  • A 实际上在 rails 4.2.7.1 应用程序上尝试了您的语法(来自问题)并且它有效。
  • 你认为它可能来自其他文件(模型,...)吗?我在 Rails 5 上
  • 你能从控制台试试 ApplicationController.new.respond_to?(:complete) 吗?
  • 这返回 false。我在同一个控制器中尝试了其他操作,它返回 true。所以问题看起来真的来自动作完成
  • 问题已修复!该操作受保护...这是在将代码发布到堆栈之前清理代码的问题:(感谢您的帮助,您让我找到了解决方案。

标签: ruby-on-rails controller routes


【解决方案1】:

您的代码似乎正确,请尝试使用以下代码行更新 routes.rb

get '/complete', to: 'application#complete', as: :complete

match '/complete', to: 'application#complete', as: :complete

get :complete, controller:"application"

如果以上所有方法都不起作用,可能是您声明了complete 方法private or protected。公开就可以解决问题。

希望有帮助!

【讨论】:

  • 对不起,三种语法仍然相同的错误:s
  • 我已经更新了我的答案,你可以接受它,这样如果他们面临同样的问题,它可以帮助其他人。
【解决方案2】:

我认为您的complete 方法无法从外部访问,在此complete 方法定义之上有任何私有或受保护的关键字。为了确保该方法可以从外部访问,请在上面添加 public 关键字。

public
def complete
   ...
end

对不起,我的英语不好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多