ActiveAdmin不保存不是来自params的属性

时间:2016-03-11 03:51:40

标签: ruby-on-rails ruby ruby-on-rails-4 devise activeadmin

在创建活动管理员记录时,我尝试保存一个不是来自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

1 个答案:

答案 0 :(得分:1)

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

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