在应用控制器中获取控制器对象和控制器强参数




大家好
我正在application controller中的Rails5应用程序中创建一个日志进程。我在那里创建是因为我想在许多具有before_save属性的控制器中调用日志进程。日志将保存用户在edit view template上的form中执行的更改。问题是我无法在application controller中获取<ObjectController:>。我已经从控制器中获得了instance variable,但我也需要ObjectController,因为我必须从控制器对象中获得strong parametersstrong 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方法包含关于当前请求的所有信息,包括参数。

希望这会有所帮助。

最新更新