2015-12-02 4 views
0

Первый вопрос на этом так идите простой пожалуйста. Я пишу драгоценный камень для использования в моем приложении rails. Жемчуг будет просто печатать в файле журнала информацию, переданную через параметры из действия в контроллере. Я работаю до тех пор, пока не захочу, чтобы файл отчета также напечатал имя действия, из которого поступает информация. Таким образом, пример будет выглядеть так:Как я могу поместить в действие Rails или имена контроллеров в свой Ruby Gem для использования в файле журнала?

Записанные данные: дата и время Отчет от действия: (имя контроллера + имя типа) Profile.update, а затем информация о параметрах. У меня есть работа, чтобы получить информацию о параметрах с помощью кода ниже.

Я прокомментировал ту часть, где, как я думал, принесет данные для меня. получив сообщение об ошибке. Любые рекомендации будут высоко оценены. Благодарю.

# initializes file and writes-only at end of file if exists or creates new one 
def self.open(filename) 
    @filename = File.open(filename,'a+') 
end 


# method to take in any amount of parameters and write to file 
def self.usageLog (*items) 
    ReportLogger.open("UsageLogging.txt") 
    # string actionName = controllerContext.RouteData.values["action"].ToString() 
    @filename.print("Logged Details: " + Time.now.strftime("%d/%m/%Y %H:%M:%S") + "\n") 
    # @filename.print("Report Action: :" + actionName) 
     items.each do |item| 
      @filename.print(item) 
     end 

     @filename.puts(" -EndLog" + "\n" + " - - - - - - - - - - - - - - ") 
    end 

Внесены изменения - я играл с этим, но не мог заставить его работать. Я изменил контроллер, чтобы вызвать ReportLogger.usageLog (profile_params), чтобы это было связано с всеми параметрами? Я изменил код Gem, как показано ниже, но, похоже, он не хочет втягивать детали контроллера в журнал.

# method to take in any amount of parameters and write to file 
def self.usageLog(params) 
    ReportLogger.open("UsageLogging.txt") 
    # string actionName = controllerContext.RouteData.values["action"].ToString() 
    #controller_name = params["controller"] 
    #action_name = params["action"] 
    #other_params = params.reject do |k,v| 
    # %w(action controller).include? k 
    #end 

    @filename.print("Logged Details: " + Time.now.strftime("%d/%m/%Y %H:%M:%S") + "\n") 
    #@filename.puts(controller_name) 

    #@filename.print("Report Action: :" + controller_name) 

    controller_name = params[:controller] 
    @filename.puts(controller_name) 

    params.each do |param| 
     @filename.print(param.to_s + "\n") 
    end 

     @filename.puts(" -EndLog" + "\n" + " - - - - - - - - - - - - - - ") 
    end 

Отчет журнала выглядит следующим образом:

Записан Детали: 02/12/2015 13:11:11

[ "имя", "Брэдли"] [ "PHONE_NUMBER", «087 6312683 "] [" image ", #, @ original_filename =" IMG_0001.jpg ", @ content_type =" image/jpeg ", @ headers =" Content-Disposition: form-data; name = \ "profile [image] \ "; filename = \" IMG_0001.jpg \ "\ r \ nContent-Type: image/jpeg \ r \ n">] ["bio", "New feck, shit!"] -EndLog


ответ

0

В PARAMS всегда содержит имя контроллера и имя Действие:

def index 
    puts params 
end 
> {"controller"=>"home", "action"=>"index"} 

Так что, если вы сделаете ваш метод usageLog принять весь PARAMS хэш, вы можете просто получить доступ к этим, как:

def self.usageLog(params) 

    controller_name = params["controller"] 
    action_name = params["action"] 
    other_params = params.reject{|k,v| %w(action controller).include? k } 

end 

Тогда где вы хотите, чтобы войти из контроллера, просто сделать:

ReportLogger.usageLog(params) 

Или, если вы хотите передать в нескольких аргументов, вы могли бы назвать это таким образом:

ReportLogger.usageLog(params[:controller], params[:action], model_params, "anything else") 

где model_params Ваш продезинфицировать белый список метод для модели вы имеете дело с.

Затем вы должны определить свой метод, как:

def self.usageLog(controller_name, action_name, *items) 
    .... 
    items.each do |item| 
    @filename.print(item.to_s + "\n") 
    end 

end 
+0

Если вы profile_params вы получите sanized список только из профиля подмножества. Подумайте, назовите его как: ReportLogger.usageLog (params). – rlarcombe

+0

Теперь я пойду. Спасибо rlarcombe за быстрый ответ и помощь. – Bradley

+0

Я немного поправил свой ответ. – rlarcombe