0

根据几个人的建议,我被告知要使我的控制器尽可能简洁。目前我的控制器中有这个:

class SearchesController < ApplicationController
  def index
    raw_result = params[:search] ||= "man on fire"
    result = raw_result.gsub(/\s+/, "+")
    movie_details = HTTParty.get("http://imdbapi.org/?title="+result+"&type=json")
    @searches = ActiveSupport::JSON.decode(movie_details)
  end
end

如何在我的模型中将它变成一个新类并在控制器中再次调用它?

当前型号和控制器:

class IMDBSearcher
  def self.search(search)
    raw_result = search || "man on fire"
    result = raw_result.gsub(/\s+/, "+")
    movie_details = HTTParty.get("http://imdbapi.org/?title="+result+"&type=json")

    ActiveSupport::JSON.decode(movie_details)      
  end
end

class SearchesController < ApplicationController
  def index
    @searches = IMDBSearcher.search(params[:search]) 
  end
end
4

1 回答 1

1

如果它是一个实例方法,你可以这样称呼它:

instance.search(something)

如果它是一个类方法,你可以这样称呼它:

IMDBSearcher.search(something)

但是,要做到这一点,你必须像这样创建你的方法:

def self.search(raw_result)

这里的技巧是使用self关键字,将方法转换为类方法(因为这里的self是类IMDBSearcher)。例如:

def self.search(search)
  raw_result = search || "man on fire"
  result = raw_result.gsub(/\s+/, "+")
  movie_details = HTTParty.get("http://imdbapi.org/?title="+result+"&type=json")

  ActiveSupport::JSON.decode(movie_details)      
end

在控制器中,您可以执行以下操作:

@searches = IMDBSearcher.search(params[:search])
于 2013-03-01T22:33:41.850 回答