如何将 Rails 操作或控制器名称拉入我的 Ruby Gem 以便在日志文件中使用?
How can I pull in the Rails action or controller names into my Ruby Gem for use in a log file?
这里的第一个问题请放轻松。我正在编写 gem 用于我的 rails 应用程序。 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
报告日志如下所示:
记录的详细信息:2015 年 2 月 12 日 13:11:11
["name", "Bradley"]
["phone_number", "087 6312683"]
["image", #, @original_filename="IMG_0001.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"profile[image]\";文件名=\"IMG_0001.jpg\"\r\nContent-Type: image/jpeg\r\n">]
["bio", "New feck, shit!"]
-结束日志
参数始终包含控制器名称和操作名称:
def index
puts params
end
> {"controller"=>"home", "action"=>"index"}
所以如果你让你的 usageLog 方法接受整个参数哈希,你可以只访问这些,比如:
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
这里的第一个问题请放轻松。我正在编写 gem 用于我的 rails 应用程序。 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
报告日志如下所示:
记录的详细信息:2015 年 2 月 12 日 13:11:11
["name", "Bradley"] ["phone_number", "087 6312683"] ["image", #, @original_filename="IMG_0001.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"profile[image]\";文件名=\"IMG_0001.jpg\"\r\nContent-Type: image/jpeg\r\n">] ["bio", "New feck, shit!"] -结束日志
参数始终包含控制器名称和操作名称:
def index
puts params
end
> {"controller"=>"home", "action"=>"index"}
所以如果你让你的 usageLog 方法接受整个参数哈希,你可以只访问这些,比如:
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