Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么';Rubymine能识别我的同名继承控制器吗?_Ruby On Rails_Ruby_Rubymine - Fatal编程技术网

Ruby on rails 为什么';Rubymine能识别我的同名继承控制器吗?

Ruby on rails 为什么';Rubymine能识别我的同名继承控制器吗?,ruby-on-rails,ruby,rubymine,Ruby On Rails,Ruby,Rubymine,我有一个名为backend的命名空间和以下控制器application\u controller.rb: class Backend::ApplicationController < ApplicationController end 类后端::ApplicationController

我有一个名为
backend
的命名空间和以下控制器
application\u controller.rb

class Backend::ApplicationController < ApplicationController
end
类后端::ApplicationController
现在,我从我的用户控制器继承此控制器:

class Backend::UserController < Backend::ApplicationController
  def index
    @users = User.all
  end

  ...
end
class Backend::UserController
对于应用程序控制器的继承,Rubymine向我显示以下错误:

这段代码适合ruby解释器。我怎样才能教鲁比明这个

我使用的是RubyMine 2018.2.3,使用的是Ruby 2.5.1p57


提前谢谢你

我猜您应该尝试正确的“直接”方式来实际打开模块

这两种方法实际上并不等同:

class Backend::ApplicationController < ApplicationController
end

module Backend
  class ApplicationController < ::ApplicationController
  end
end
类后端::ApplicationController
由于后者实际上正确地将模块嵌套设置为按预期工作:

module Backend
  # this class will inherit from Backend::ApplicationController
  # and not ::ApplicationController
  class UserController < ApplicationController
  end
end
模块后端
#此类将从后端::ApplicationController继承
#而不是::ApplicationController
类UserController

一般来说,应避免使用“名称空间”类的“快捷”定义(
class Foo::Bar
),因为这会导致不断查找的问题。

两个后端控制器都位于
app/controllers/Backend/*.rb
?是,它们都在
app/controllers/backend/
中,我刚刚安装了RubyMine 2018.2.3,我可以确认这个问题。仅当您键入文本时才会发生此错误。我认为这是一个bug,应该向您报告。解决方法:尝试删除文本Backend::ApplicationController,然后再次将其粘贴回去。这似乎是可行的。我确实意识到Rails使用
class Foo::Bar
生成类,但这是因为如果必须正确处理模块嵌套,代码模板会变得更加复杂,而不是因为这是一种好的做法。使用“直接”方式也是。我学到了一些东西来改进我的写作风格。它也适用于RubyMine,但另一种书写方式也应该适用。正如@lual所指出的,这似乎是一个bug。我已经向JetBrains报告了。