大家好。
我在application controller
内的Rails 5应用程序中创建了一个日志过程。我在那里创建是因为我想在具有before_save
属性的许多控制器中调用日志进程。该日志将保存用户在form
edit view template
上执行的更改。问题是我无法在<ObjectController:>
内获得application controller
。我已经从控制器获得instance variable
,但我也需要ObjectController
,因为我必须从控制器对象获取strong parameters
。 strong parameters
保存用户在输入字段中插入的所有数据。
这就是我已经做过的事情:
app / controllers / application controller
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
因此,我需要获取Controller对象来访问强参数,以便比较用户编辑的任何数据。我不确定这是否是执行此操作的最佳方法/做法。如果有更好的方法,我想知道。但我需要在需要数据日志的大量控制器中调用此过程 谢谢你的时间和对不起任何糟糕的英语..
答案 0 :(得分:0)
如果params
方法无法帮助您实现目标(但值得尝试),您可以随时通过调用 self
来访问控制器对象的当前实例任何实例方法或行动的上下文。
要测试您可以将byebug
置于任何操作中,请使用其他参数在浏览器中调用该操作,并在控制台中键入self
。
例如,在控制器中:
class UsersController < ApplicationController
def show
byebug
end
end
浏览器中的:
本地主机:3000 / some_param = 1234&安培; another_param =测试
那里会有很多有用的东西,比如self.instance_variables
=&gt; [.... :@_request, ... :@_params]
。
此外,request
方法包含有关当前请求的所有信息,包括参数。
希望这会有所帮助。