0


大家好。
我正在我的 Rails 5 应用程序中创建一个日志进程,位于application controller. 我在那里创建是因为我想在许多具有before_save属性的控制器中调用日志进程。日志将保存用户在formon中执行的更改edit view template。问题是我进不去<ObjectController:>里面application controller。我已经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

因此,我需要获取控制器对象来访问强参数,以便比较用户是否编辑了任何数据。我不确定这是否是最好的方法/做法。如果有更好的方法,我想知道。但是我需要在大量需要数据日志的控制器中调用这个过程。
谢谢你的时间,对不起任何不好的英语..

4

1 回答 1

0

如果params方法不能帮助您实现目标(但值得尝试),您始终可以通过self在任何实例方法或操作的上下文中调用来访问控制器对象的当前实例。

要测试您可以byebug执行任何操作,请在浏览器中使用附加参数调用该操作并输入self控制台。

例如,在控制器中:

class UsersController < ApplicationController
  def show
    byebug
  end
end

在浏览器中:

localhost:3000/?some_param=1234&another_param=testing

里面会有很多有用的东西,比如self.instance_variables=> [.... :@_request, ... :@_params]

方法还request包含有关当前请求的所有信息,包括参数。

希望这会有所帮助。

于 2017-10-28T02:19:35.887 回答