rails_admin和devise在新用户创建和更新时运行方法

时间:2017-06-15 16:36:49

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

我试图在我的rails应用程序中引入一个方法,该方法将输入rails_admin新用户表单中的值,并传递一个方法来填充用户的剩余只读部分。用户模型是一个设计模型。

我尝试使用if save在自定义设备控制器中引入该方法但是检查控制台时,该方法似乎没有运行。

我想这需要在rails admin中配置编辑操作,但我不确定如何使用rails admin进行自我引用以及如何在此实例中调用if save

提前致谢!!

1 个答案:

答案 0 :(得分:0)

我希望我能很好地理解你的问题,但你希望在用户保存对象后调用一个方法吗?我过去做过这个:

class Employee < ApplicationRecord
  has_many :downtimes

  # A getter used to populate the field on rails admin
  def downtime_reason
    downtimes.last.reason
  end

  # A setter that will be called with whatever the user wrote in your field
  def downtime_reason=(reason)
    downtimes.find_or_create_by(reason: reason)
  end

  rails_admin do
    configure :downtime_reason, :text do
      virtual? 
    end

    edit do
      field :downtime_reason
    end
  end
end

我不建议乱用rails管理员控制器。但是如果你必须想要改变帖子上的参数,你可以随时做:

class ApplicationController
  before_action :modify_params if: :in_admin_controller?

  def modify_params
    params[:something] = 'your brand new value'
  end

  def in_admin_controller?
    params[:controller] == 'rails_admin/main'
  end
end

这取决于rails admin控制器从应用程序控制器继承,在最新的(1.2.0)rails admin中,这可以在初始化程序中进行配置,如下所示:

#/config/initializers/rails_admin.rb
RailsAdmin.config do |config|
  config.parent_controller = '::ApplicationController'
end