繁体   English   中英

Rails_admin,将 Devise 的 current_user 分配给 model inside action

[英]Rails_admin, Assigning Devise's current_user to model inside action

我有 Devise Person将登录并管理rails_admin应用程序的人。

我有一个名为Model的 model,它具有由mongoid-history添加的updater

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

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

根据此链接 github ,我无法设置current_person ,它由 Devise 自动创建。 这意味着每次我的Model发生问题时,我都需要手动设置updater

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

我只知道我需要在initializers/rails_admin.rb中为每个操作写一些东西

无法从模型访问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。

Mr.D 的回答似乎不起作用(至少从 rails_admin 2.0.2 开始); bindings 没有:view键。 现在正确的键是:controller

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

如果你没有一个属性来存储这个 id 而只需要 id 来验证另一个操作,你可以为它创建一个属性:

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

MODEL:

class TaxPlan < ApplicationRecord
  attr_accessor :updater_id
  
  validate :validate_updater_id

  def validate_updater_id
    yor code validation here
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM