覆盖rails中的gem方法

时间:2017-03-14 21:30:46

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我想让用户在这种情况下添加兴趣 - 电视节目 - 为了确保他们输入正确的电视节目,我首先要搜索imdb并让他们选择一个返回的标题。

我发现这个宝石https://github.com/ariejan/imdb几乎可以满足我的需要。如果我搜索"吸血鬼日记",它将返回它和200个额外的匹配。

我经历了宝石,我发现他在这里查询部分https://github.com/ariejan/imdb/blob/master/lib/imdb/search.rb

   def self.query(query)
      open("http://akas.imdb.com/find?q=#{CGI.escape(query)};s=tt")
   end

该查询基本上使用此链接http://akas.imdb.com/find?q=并返回给定输入可以找到的所有内容 - 电影,电视节目,剧集。现在我找到了一个更高级的查询,它使用type和其他一些参数。所以我实际上只返回4个结果而不是250个。我所要做的就是用http://www.imdb.com/search/title?title=The%20Vampire%20Diaries&title_type=tv_series替换该查询。

如何覆盖该搜索方法?

2 个答案:

答案 0 :(得分:2)

您可以使用class_eval并将其放在装饰器文件夹

app/decorators/imdb/search_decorator.rb

class Imdb::Search.class_eval do
  def self.query(query)
  end
end

答案 1 :(得分:0)

您可以重新打开该类以覆盖该方法:

class Imdb::Search
  def self.query(query)
    # your custom logic here
  end
end

请注意,您可以在您的版本中调用super(query)以获取原始结果。