【问题标题】:Ruby and Rails code completion issues in RubyMineRubyMine 中的 Ruby 和 Rails 代码完成问题
【发布时间】:2011-12-13 07:00:13
【问题描述】:

与我熟悉的 C# 开发中的代码补全相比,我发现 RubyMine 提供的代码补全非常不完整。

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

  2. ActionMailer 这样的一些类神奇地 生成像“deliver_*”方法这样的方法(见这个example)......因为我在代码完成中看不到它们如何我应该知道它们甚至存在吗?
    (不幸的是,我现在也遇到了一个错误,deliver_contact 方法不存在......正如我完全从示例中复制的那样,我现在问自己这个功能是否仍然存在 8[)

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

【问题讨论】:

    标签: ruby-on-rails ruby rubymine


    【解决方案1】:

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

    在当前版本的 Rails 中,deliver_* 方法已被弃用,取而代之的是 MyClass.contact.deliver 样式。

    【讨论】:

    • 好的,感谢您的提示,但它并没有真正回答我的问题..您如何“知道”课程的方法..或者您是否在互联网上阅读过? ^^
    • 您会发现自己经常阅读源代码或可用的文档。当然,程序员之间的风格各不相同,但许多 Ruby 库严重依赖元编程和动态编写的方法。这种技术根本不适合自动完成。
    • @David Dave 回答得很好。在您对 Rails 有一些经验之后,您通常会猜测 :) apidock 是一个很棒的网站,我一直都在使用它。
    【解决方案2】:

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

    这是一个非常简单的例子:Ruby: define_method vs. def

    你会发现 Rails 中的很多东西都与方法缺失和元编程理念有关。

    【讨论】:

      【解决方案3】:

      并不是说 Ruby 没有“设计”用于代码完成,而是可以通过多种方式添加行为,包括在程序执行期间。这使得代码完成困难。 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 变体),因此某些功能可能仍然被隐藏。

      【讨论】:

      • 事实上,尽管 Ruby/Rails 核心团队中的大多数程序员只使用文本编辑器。
      • @JakubHampl 所以?并不意味着它是最有效的做法(它不是),或者每个人都这样做,或者你不能同时使用(我同时使用)。
      • 戴夫我一直很喜欢你的帖子,也喜欢这个。是的,我使用多个操作系统(MAC/Win/U)以及许多编辑器和 IDE。
      • @MichaelDurrant 谢谢;这很亲切。是的,整个 IDE 与文本编辑器的关系让我感到困惑——适合这项工作的正确工具,它们都有自己的位置、优势和劣势!
      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2011-08-07
      • 2012-07-10
      • 1970-01-01
      • 2016-03-16
      • 2018-04-18
      相关资源
      最近更新 更多