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
我有 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
无法从模型访问 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。
:view
键。正确的密钥现在是 :controller
:
bindings[:controller].current_user # returns current User object