Rails_admin,将 Devise 的 current_user 分配给模型内部动作

Rails_admin, Assigning Devise's current_user to model inside action

我有 Devise 模型 Person,它将登录并管理 rails_admin 应用程序。

我有一个名为 Model 的模型,其中 updater 是由 mongoid-history 添加的。

为了设置谁更新了我的故事,我需要做这样的事情:

model = Model.new
model.updater = Person.first
model.save

根据这个link to github,我无法设置由Devise自动创建的current_person。这意味着每次 Model.

出现问题时,我都需要手动设置 updater

如何获取 current_person 并将其设置为 Model 发生 rails_admin's 操作的地方?

我只知道initializers/rails_admin.rb

中的每个action都需要写点东西

无法从模型访问 current_user,因为 ActiveRecord 模型可以独立于 Rails 应用程序使用,无需登录即可使用。

控制器(通常)要求用户登录,因此可以访问用户会话和 current_user 方法。因此,控制器必须完成在模型上设置更新程序的工作。

也许您可以在控制器中设置一个回调方法,该方法作用于修改模型并在那里设置更新程序的任何操作。

我找到了一个解决我的问题的方法,但我不知道它是否是好的方法。

如果我想在 edit 操作中分配我的 current_person,我需要这样写:

config.model Model do

   edit do
     field :updater_id, :hidden do
     visible true
     def value
       bindings[:view]._current_user.id
     end
    end
   end

end

它创建了隐藏字段,其中包含当前登录人员的 ID。

似乎不起作用(至少从 rails_admin 2.0.2 开始);绑定没有 :view 键。正确的密钥现在是 :controller:

bindings[:controller].current_user # returns current User object