[英]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.