2013-03-01 5 views
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 

ответ

1

Если это метод экземпляра вы называете это так:

instance.search(something) 

Если это метод класса вы называете это нравится:

IMDBSearcher.search(something) 

НО, для этого вам необходимо создать свой метод следующим образом:

def self.search(raw_result) 

Трюк здесь заключается в использовании ключевого слова 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]) 
+0

я получаю сообщение об ошибке в представлении: неинициализированная постоянная SearchesController :: IMDBSearcher – emailnitram

+0

Странно, 'IMDBSearcher' модель в вашем приложение, нет? Не могли бы вы разместить свой контроллер и код модели? – Kaeros

+0

Я обновил вопрос с помощью текущей модели и контроллера. двойное проверенное правописание не уверен, почему я получаю эту ошибку – emailnitram