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

nimxete2  于 2023-01-30  发布在  Ruby
关注(0)|答案(4)|浏览(134)

我有Devise模型Person,将登录和管理rails_admin应用程序。
我有一个名为Model的模型,其中包含由mongoid-history添加的updater
为了设置谁更新了我的故事,我需要这样做:

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中为每个操作写一些东西

omhiaaxx

omhiaaxx1#

无法从Model访问current_user,因为ActiveRecord模型可以独立于Rails应用程序使用,无需登录即可使用。
控制器(经常)要求用户登录,从而访问用户会话和current_user方法,因此控制器必须在模型上设置更新程序。
也许您可以在控制器中设置一个回调方法,该方法作用于修改模型的任何操作,并在那里设置更新器。

mgdq6dx1

mgdq6dx12#

我已经找到了一个解决我问题的办法,但我不知道这是否是个好办法。
如果我想在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。

vshtjzan

vshtjzan3#

Mr.D's answer似乎不起作用(至少从rails_admin 2. 0. 2开始);绑定没有:view密钥。正确的密钥现在是:controller

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

bksxznpy4#

如果你没有一个属性来存储这个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

型号:

class TaxPlan < ApplicationRecord
  attr_accessor :updater_id
  
  validate :validate_updater_id

  def validate_updater_id
    yor code validation here
  end
end

相关问题