繁体   English   中英

RubyMine中的Ruby和Rails代码完成问题

[英]Ruby and Rails code completion issues in RubyMine

与我在C#开发中熟悉的代码完成相比,我发现RubyMine提供的代码完成令人惊讶地不完整。

  1. 当我用某些方法编写一个类并想从另一个类中调用它们时,
    为什么我会得到一个长度为“一英里”的代码完成列表,但其中没有相关的方法建议?
    (或者这是我的RubyMine中的错误/功能吗?!)

  2. 诸如ActionMailer类的某些类神奇地生成诸如“ deliver_ *”方法之类的方法(请参见本示例 )...由于在代码完成中没有看到它们,我怎么知道它们甚至存在?
    (不幸的是,我现在也遇到错误,那个deliver_contact方法不存在...正如我从示例中完全复制的那样,现在我问自己,该功能是否仍然存在8 [)

他们有什么办法解决这些问题?

这并不是说Ruby不是为代码完成而“设计”的,而是可以以多种方式添加行为的,包括在程序执行期间。 这使代码完成变得困难 RubyMine做得很好,但是仅当已知对象的类型时,它才具有明显或已知的功能。

http://apidock.com提供了有关Ruby,Rails和RSpec的参考资料。 在irb / pry中玩耍会很有帮助。 您始终可以通过在REPL中评估foo.methods来获取类/实例上的方法(尽管我几乎总是foo.methods.sort )。

如果您“通过某种方式”知道要查找的内容,则可以过滤该列表,例如

> "foo".class.instance_methods(false).sort.grep /each/
=> [:each_byte, :each_char, :each_codepoint, :each_line]

在Rails环境中,运行rails console (我更喜欢在控制台中使用pry,YMMV)使您可以访问环境,包括公开许多动态方法。 请注意,某些方法直到第一次被调用才存在(特别是find_by_foo_and_bar那些方法),因此某些功能可能仍被隐藏。

出现这些问题的主要原因是Ruby(onRails)从未设计成可用于代码完成。 文本编辑器中的大多数Rubyist代码都非常高兴,因为它们不需要代码完成。

在当前版本的Rails中,不推荐使用delivery_ *方法,而推荐使用MyClass.contact.deliver样式。

遵循以下结构的所有方法:delivery_ *均使用元编程原理。

这是一个非常简单的示例: Ruby:define_method与def

您会发现,rails中的许多内容都与方法缺失和元编程哲学有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM