ActiveAdmin 不保存不是来自参数的属性

ActiveAdmin does not save attributes not coming from params

在创建活动管理员记录时,我正在尝试保存并非来自参数的属性 (role_type)。

但是,属性不会在创建时保存。 我已将其添加到 permit_params。

permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []

controller do

    def create
      user = User.create(name: params[:user][:name], email: params[:user][:email], password: SecureRandom.hex, role_type: "employee")

      flash[:notice] = "User Created"
      redirect_to admin_user_path(user)
    end
 end

如果你想将参数散列与你手动分配的一些属性结合起来,最干净的方法是使用块

permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []

controller do

    def create
      user = User.create(permitted_params[:user]) do |u|
        u.password = SecureRandom.hex
      end

      flash[:notice] = "User Created"
      redirect_to admin_user_path(user)
    end
 end

但是您的密码加密方案非常幼稚 - 我建议您使用 ActiveModel::SecurePassword 而不是尝试重新发明密码加密轮并创建不安全的身份验证系统。

另一个主要问题是您实际上并没有检查用户是否已创建!

permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []

controller do

    def create
      user = User.new(permitted_params[:user]) do |u|
        u.password = SecureRandom.hex
      end

      if user.save 
        flash[:notice] = "User Created"
        redirect_to admin_user_path(user)
      else
        render :new
      end
    end
 end