大家好
我正在application controller
中的Rails5应用程序中创建一个日志进程。我在那里创建是因为我想在许多具有before_save
属性的控制器中调用日志进程。日志将保存用户在edit view template
上的form
中执行的更改。问题是我无法在application controller
中获取<ObjectController:>
。我已经从控制器中获得了instance variable
,但我也需要ObjectController
,因为我必须从控制器对象中获得strong parameters
。strong parameters
保存用户在输入字段上插入的所有数据。
这就是我已经做过的:
应用程序/控制器/应用程序控制器
def log
@controlr = instance_variable_get("@#{controller_name.singularize}") #get the edited object
attribs = @controlr.attribute_names #get object table column names
edited_data = controlr_params #stuck here!
ctrlr = @controlr.attributes #retrive object data from db
...
##compare the edited_data with the actual data from db and check if something was changed
end
因此,我需要获得控制器对象来访问强参数,以便比较用户是否编辑了任何数据。我不确定这是否是最好的方法/做法。如果有更好的方法,我想知道。但我需要在大量需要数据日志的控制器中调用此过程
谢谢你抽出时间,很抱歉英语不好。。
如果params
方法不能帮助您实现目标(但值得一试),您总是可以通过在任何实例方法或操作的上下文中调用self
来访问控制器对象的当前实例。
要测试您是否可以将byebug
放入任何操作中,请在浏览器中使用附加参数调用该操作,然后在控制台中键入self
。
例如,在控制器中:
class UsersController < ApplicationController
def show
byebug
end
end
在浏览器中:
localhost:3000/?some_param=1234&another_param=测试
里面会有很多有用的东西,比如self.instance_variables
=>[.... :@_request, ... :@_params]
。
此外,request
方法包含关于当前请求的所有信息,包括参数。
希望这会有所帮助。