我在 StackOverflow 和 Google 中寻找了很多东西,但我找不到任何解决我的问题的方法。我正在尝试覆盖 Twitter-text gem 中的一个方法,但我认为它比这更复杂一些。
我编辑了 Twitter-text gem 并创建了一个新的 gem 用于我的项目。在这个新的 gem 中,我改变了一些东西并将一个名为“hashtag_url”的方法添加到 Autolink 模块。
def hashtag_url(hashtagName)
end
我称之为“hashtag_url”的方法是这样的(这个方法也在 gem 上):
def link_to_hashtag(entity, chars, options = {})
(...)
href = hashtag_url(hashtag)
end
Hashtag_url 是空白的,因为我需要访问我的数据库,所以,我只是在 Twitter::Autolink 模块中声明了这个方法,并想在我的项目中覆盖这个方法。现在,让我们看一下我的项目的代码。我遵循了stackoverflow问题的一些提示,得到了这个结果:
/lib/ritter.rb (只是一个测试方法)
require 'ritter'
Twitter::Autolink::ClassMethods.module_eval do
def hashtag_url(hashtagName)
puts "I think I can't do that..."
if hashtag = Hashtag.find_by_name(hashtagName)
puts "I'm ok guys!"
return "http://localhost:3000/hashtags/#{hashtag.slug}"
end
end
end
当我尝试检查该方法是否被覆盖时,我在 Rails 控制台中使用它:
Twitter::Autolink.method(:hashtag_url).source_location
我得到了:
NameError: undefined method `hashtag_url' for class `Module'
from (irb):1:in `method'
from (irb):1
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
PS:我不会在任何地方调用、要求或包含“Ritter.rb”,我需要这样做吗?我的 Ritter.rb 是在正确的路径上,这里面的代码是对的吗?我该如何解决这个问题?
如有必要,我可以更多地谈论我为什么需要数据库。谢谢,欢迎任何评论和回答!