【问题标题】:Extending a core class in rails plugin is not working在 Rails 插件中扩展核心类不起作用
【发布时间】:2014-10-20 21:37:19
【问题描述】:

#PLUGIN/lib/#PLUGIN 内部我插入了以下内容:

String.class_eval do
  def to_squawk
    "squawk! #{self}".strip
  end
end

当我尝试在 Rails 控制台中进行测试时。我收到以下错误:NoMethodError: undefined methodto_squawk' for "test string":String`

Loading development environment (Rails 4.2.0.beta2)
2.1.3 :001 > "test string".to_squawk
NoMethodError: undefined method `to_squawk' for "test string":String
  from (irb):1
  from /Users/fab/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/console.rb:110:in `start'
  from /Users/fab/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/console.rb:9:in `start'
  from /Users/fab/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:68:in `console'
  from /Users/fab/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
  from /Users/fab/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0.beta2/lib/rails/commands.rb:17:in `<top (required)>'
  from bin/rails:4:in `require'
  from bin/rails:4:in `<main>'

我在这里学习教程:http://guides.rubyonrails.org/plugins.html

有人知道问题出在哪里吗?

【问题讨论】:

  • 有人可以试试 Rails 指南中的代码吗?简单的三个步骤,让我知道它是否适合您。我在 2 台机器上试过这个,我得到了同样有缺陷的输出。 guides.rubyonrails.org/plugins.html ++谢谢!
  • 我知道这是两年前的事了,但你解决过这个问题吗?我遇到了同样的问题。 Rails 文档可能完全错误,这似乎很疯狂。

标签: ruby-on-rails ruby ruby-on-rails-4 rvm minitest


【解决方案1】:

这是 Rails 指南中的代码:

String.class_eval do
  def to_squawk
    "squawk! #{self}".strip
  end
end

这是你的代码:

String.class_eval do
  def self.to_squawk
    "squawk! #{self}".strip
  end
end

看到区别了吗?指南的代码定义了 String 实例响应的实例方法(即"foo".to_squawk # =&gt; "squawk! foo"),但您的代码及其杂散self 定义了 String 类响应的类方法(即String.to_squawk # =&gt; "squawk! String")。

【讨论】:

  • 抱歉,感谢您指出这一点。我不是故意让self 在那里,这只是我正在尝试的东西。其实这两种方式都行不通。我一步一步复制了代码,我在两台机器上做了,但它不起作用。
  • 这个问题是从这个问题开始的问题的延续:stackoverflow.com/questions/26473190/…(感谢帮助)
  • 不,我没有。我尝试了多个版本的 Ruby 和 2 台机器,但我仍然遇到这个问题。通过 MiniTest ——我试图查看类方法是否在控制台中工作,然后我意识到它不起作用。内部有些不对劲。我认为这是一个错误......
  • 我刚刚完成了 Rails 指南中的步骤 1-3,它工作得很好(使用 4.1.6,最新的稳定 Rails)。你确定你在正确的目录中吗?运行rake 时需要位于yaffle 目录中,运行bin/rails console 时需要位于yaffle/test/dummy 目录中。由于您使用的是 RVM,您可能需要使用 bundle exec,但我不是 RVM 用户,所以我不能确定。
  • 这太疯狂了——我在正确的目录中。我猜它是 Rails 4.2.0.beta2 发布问题。我会尝试 4.1.6
猜你喜欢
  • 2023-03-12
  • 2013-07-01
  • 2013-08-14
  • 2015-12-03
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多