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

Dav*_*vid 0 ruby ruby-on-rails rubymine

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

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

  2. 有些类像ActionMailer 神奇地生成像"deliver_*"方法一样的方法(参见本)......由于我在代码完成时没有看到它们,我怎么知道它们甚至存在?
    (不幸的是,我现在也得到一个错误,那个deliver_contact方法不存在......正如我完全从示例中复制过来问我自己现在这个特征仍然存在8 []

他们有什么方法可以解决这些问题吗?

Dav*_*ton 5

并不是Ruby不是"设计"用于代码完成,而是可以通过各种方式添加行为,包括在程序执行期间.这使代码完成变得困难.RubyMine做得很好,但只有当对象的类型已知时,才能用于明显或已知的功能.

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

如果您使用find/grep"有点"了解您正在寻找的内容,则可以过滤该列表,例如

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

在Rails环境中,运行rails console(我更喜欢使用pry作为控制台,YMMV)使您可以访问您的环境,包括暴露许多动态方法.请注意,某些方法在第一次调用之前不存在(特别是那些方法find_by_foo_and_bar),因此某些功能仍可能被隐藏.

  • @JakubHampl那么?这并不意味着它是最有效的事情(它不是),或者每个人都这样做,或者你不能同时使用它们(我同时使用它们). (5认同)