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