【问题标题】:ActiveAdmin does not save attributes not coming from paramsActiveAdmin 不保存不是来自参数的属性
【发布时间】:2016-03-11 03:51:40
【问题描述】:

在创建活动管理员记录时,我正在尝试保存不是来自参数的属性 (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

【问题讨论】:

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


    【解决方案1】:

    如果您想将参数哈希与您手动分配的某些属性结合起来,最简洁的方法是使用块

    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
    

    【讨论】:

    • 谢谢@max。问题是我为 role_type 字段添加了使用 attr_accessible。这阻止了将属性存储在数据库中。
    猜你喜欢
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多