簡體   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