Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 5在Desive中向“User”添加一些属性_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails Rails 5在Desive中向“User”添加一些属性

Ruby on rails Rails 5在Desive中向“User”添加一些属性,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我使用的是Rails 5.1,我添加了用于用户身份验证的Desive。我在表中添加了一些额外的属性。在我通过ajax创建了一个新用户之后,用户创建了一个新用户,但是缺少了一些属性。我检查了日志,designe没有在insert查询中发送这些列 首先,我将designe_参数_消毒剂添加到我的应用程序控制器: before_action :configure_permitted_parameters, if: :devise_controller? protected def configur

我使用的是Rails 5.1,我添加了用于用户身份验证的Desive。我在表中添加了一些额外的属性。在我通过ajax创建了一个新用户之后,用户创建了一个新用户,但是缺少了一些属性。我检查了日志,designe没有在insert查询中发送这些列

首先,我将designe_参数_消毒剂添加到我的应用程序控制器:

before_action :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:email,:password1,:password2,:title,:phone, :first_name , :last_name, :postalcode, :address,:coordinate, :latitude, :longitude])
end
    @user = User.new
    @user.email = params[:sign_up][:email] 
    @user.password = params[:sign_up][:password1]
    @user.password_confirmation =params[:sign_up][:password2]
    @user.phone = params[:sign_up][:phone]
    @firstname = params[:sign_up][:first_name]
    @user.first_name = @firstname
    @user.last_name = params[:sign_up][:last_name]
    @user.postalcode = params[:sign_up][:postalcode]


    @coordinate = Geocoder.coordinates(params[:sign_up][:postalcode])

    @user.coordinate = @coordinate
    @user.latitude = @coordinate[0]
    @user.longitude = @coordinate[1]
    @user.address = params[:sign_up][:address]



    @user.valid?
    if @user.errors.blank?

      @user.save
    end
我在我的用户模型中添加了attr_访问器:

属性访问器:password1、:password2、:phone、:postalcode、:first\u name、, :姓氏,:地址

在注册控制器中结束以下代码“我的创建方法”:

before_action :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:email,:password1,:password2,:title,:phone, :first_name , :last_name, :postalcode, :address,:coordinate, :latitude, :longitude])
end
    @user = User.new
    @user.email = params[:sign_up][:email] 
    @user.password = params[:sign_up][:password1]
    @user.password_confirmation =params[:sign_up][:password2]
    @user.phone = params[:sign_up][:phone]
    @firstname = params[:sign_up][:first_name]
    @user.first_name = @firstname
    @user.last_name = params[:sign_up][:last_name]
    @user.postalcode = params[:sign_up][:postalcode]


    @coordinate = Geocoder.coordinates(params[:sign_up][:postalcode])

    @user.coordinate = @coordinate
    @user.latitude = @coordinate[0]
    @user.longitude = @coordinate[1]
    @user.address = params[:sign_up][:address]



    @user.valid?
    if @user.errors.blank?

      @user.save
    end
我在控制台中看到以下日志:

SQL(0.5ms)插入“用户”(“电子邮件”,“加密密码”, “创建时间”、“更新时间”、“用户角色”、“纬度”、“经度”, “坐标”)值($1、$2、$3、$4、$5、$6、$7、$8)返回“id” [“电子邮件”jd@gmail.com“],[“加密密码”, “$2a$11$Rsn8pM0wVfiRAHwMQ/8YTeYGDn6qzAvZEFPJjqq4Ri.xZfGdof9f6”], [“创建于”,“2017-11-13 12:07:27.781262”],[“更新于”, “2017-11-13 12:07:27.781262”]、[“用户角色”、“t”]、[“纬度”, 53.3960084],“经度”,-2.929237],“坐标”,“[53.3960084,-2.929237]]

为什么我的代码将坐标、经度和格度属性保存到db中,而不保存名字、姓氏和地址属性?我怎样才能解决这个问题? 最好的

编辑: 我的js代码:

            $.ajax({
            type: "POST",
            url: "/users",
            data: {
                sign_up: {
                    first_name: $('#firstname').val(),
                    last_name: $('#lastname').val(),
                    email: $('#email').val(),
                    password1: $('#password1').val(),
                    password2: $('#password2').val(),
                    postalcode: $('#postalcode').val(),
                    phone: $('#phone').val(),
                    website: $('#website').val(),
                    title: $('#title').val(),
                    address: $('#address').val(),
                }
            },
我的用户Shcema

create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "superadmin_role"
t.boolean "user_role"
t.string "first_name"
t.string "last_name"
t.string "phone"
t.string "post_code"
t.float "latitude"
t.float "longitude"
t.string "coordinate"
t.string "address"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
结束

编辑2: 我通过以下方式进行了测试:

 @u = User.create(first_name: params[:sign_up][:first_name], email: 
 params[:sign_up][:email], password: params[:sign_up][:password1])
 @u.save!
结果是

参数:{“注册”=>{“名字”=>,“姓氏”=>“联系人”, “电子邮件”=>”Test1603@test.com“,“password1”=>“[已筛选]”, “密码2”=>“[过滤]”、“postalcode”=>“L16 2WA”、“电话”=>“123456”, “地址”=>“地址”}}(0.5ms)开始用户存在(0.5ms)选择 1作为“用户”中的一个,其中“用户”。“电子邮件”=$1限制$2[[“电子邮件”, "test1603@test.com“],[“限制”,1]]SQL(1.0ms)插入“用户” (“电子邮件”、“加密密码”、“创建时间”、“更新时间”)值 ($1,$2,$3,$4)返回“id”[[“email”,”test1603@test.com"], [“加密密码”, “$2a$11$K2fQmO4GcnwH3egXLDzJr.KGERWoMR93tF9Vp7OMNxqVE7KPVKfwm”], [“创建于”,“2017-11-13 13:03:56.876695”],[“更新于”, “2017-11-13:03:56.876695”](0.5ms)提交(0.0ms)开始
(0.5ms)提交在218ms内完成200 OK(视图:0.3ms| 活动记录:3.0ms)


从模型中删除属性访问器

您不需要一次设置一个属性。您可以在中看到完整的代码示例。尽管如此,我不明白您的代码失败的原因。向控制器发送哪些参数?也许你把
first\u name
firstname
或者类似的东西混在一起了?您的数据库模式是什么?如果没有用于
用户的列。first_name
(即,它只是一个虚拟属性),则它无法持久保存到数据库。我添加了我的js代码。我检查了controller:first\u name和:last\u name中的值是否不为空。那么数据库架构呢?是否
users.first\u name
实际上是一个持久化属性?我从shema.rb中添加了users部分。我需要attr\u访问器,但我删除了attr\u访问器中的db列。谢谢你的帮助。现在我的attr_访问器是:attr_访问器:password1,:password2,:postalco。为什么不保存邮政编码和密码?为什么你有两个密码?我不会在数据库中存储邮政编码。我正在使用查找坐标。Password1和Password2用于后端的第二次检查密码。我将存储在db only password列上。你是说这就像密码确认一样吗?