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报告了。