【问题标题】:Rails_admin, Assigning Devise's current_user to model inside actionRails_admin,将 Devise 的 current_user 分配给内部操作模型
【发布时间】:2015-08-25 06:09:46
【问题描述】:

我有 Devise Model Person,它将登录并管理 rails_admin 应用程序。

我有一个名为Model 的模型,其中有updatermongoid-history 添加。

为了设置谁更新了我的故事,我需要这样做:

model = Model.new
model.updater = Person.first
model.save

根据这个link to github,我不能设置current_person,它是由Devise自动创建的。这意味着每次我的Model 发生问题时,我都需要手动设置updater

如何获取current_person 并将其设置为Model 发生rails_admin's 操作的位置?

我只知道initializers/rails_admin.rb中的每个动作都需要写点东西

【问题讨论】:

  • This 可能会有所帮助。阿杰的回答。我以前做过这样的事情。

标签: ruby-on-rails ruby devise rails-admin


【解决方案1】:

模型无法访问current_user,因为 ActiveRecord 模型可以独立于 Rails 应用程序使用,无需登录即可使用。

控制器(通常)要求用户登录,因此可以访问用户会话和current_user 方法。因此,控制器必须完成在模型上设置更新程序的工作。

也许您可以在控制器中设置一个回调方法,该方法作用于任何修改模型的操作并在那里设置更新程序。

【讨论】:

    【解决方案2】:

    我为我的问题找到了一种解决方案,但我不知道这是否是好的方法。

    如果我想在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。

    【讨论】:

    • 这会创建一个隐藏字段,可由用户或在 POST 数据中操作,这使得该解决方案不安全。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多