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

时间:2011-10-22 18:43:09

标签: ruby-on-rails ruby rubymine

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

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

  2. ActionMailer 这样的某些类神奇地生成类似“deliver_ *”方法的方法(请参阅此example)...因为我没有看到它们在代码完成中我怎么知道它们甚至存在?
    (不幸的是我此刻也遇到错误,deliver_contact方法不存在......正如我完全从示例中复制过来问我自己现在这个特征仍然存在8 [)

  3. 他们是否有办法解决这些问题?

3 个答案:

答案 0 :(得分:5)

并不是Ruby不是“设计”用于代码完成,而是可以通过各种方式添加行为,包括在程序执行期间。这使代码完成 hard 。 RubyMine做得很好,但仅在明确或已知功能时才知道对象的类型。

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

如果您使用find / grep“有点”知道您要查找的内容,可以过滤该列表,例如

> "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种类的方法)因此某些功能可能仍然被隐藏。

答案 1 :(得分:0)

您遇到这些问题的主要原因是Ruby(onRails)从未设计为与代码完成一起使用。大多数Rubyist代码都在文本编辑器中,并且非常高兴他们不需要代码完成。

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

答案 2 :(得分:0)

遵循以下结构的所有方法:deliver_ *正在使用 元编程哲学。

以下是一个非常简单的示例:Ruby: define_method vs. def

你会发现rails中的很多东西都与方法缺失和元编程哲学有关。