簡體   English   中英

在Rails插件中擴展核心類無法正常工作

[英]Extending a core class in rails plugin is not working

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

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

當我嘗試在Rails Console中進行測試時。 我收到以下錯誤: NoMethodError: undefined method “測試字符串”的NoMethodError: undefined method to_squawk':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指南中的代碼:

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 # => "squawk! foo" ),但是您的代碼及其雜散的self定義了String類響應的類方法(即String.to_squawk # => "squawk! String" )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM