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

时间:2017-10-27 19:55:31

标签: ruby-on-rails object controller strong-parameters applicationcontroller


大家好。
我在application controller内的Rails 5应用程序中创建了一个日志过程。我在那里创建是因为我想在具有before_save属性的许多控制器中调用日志进程。该日志将保存用户在form edit view template上执行的更改。问题是我无法在<ObjectController:>内获得application controller。我已经从控制器获得instance variable,但我也需要ObjectController,因为我必须从控制器对象获取strong parametersstrong 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对象来访问强参数,以便比较用户编辑的任何数据。我不确定这是否是执行此操作的最佳方法/做法。如果有更好的方法,我想知道。但我需要在需要数据日志的大量控制器中调用此过程 谢谢你的时间和对不起任何糟糕的英语..

1 个答案:

答案 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方法包含有关当前请求的所有信息,包括参数。

希望这会有所帮助。