无法与用户建立个人资料

时间:2016-12-01 12:59:54

标签: ruby ruby-on-rails-5

用户模型:

has_one :profile
before_create :build_profile # Works when using form views

个人资料模型

belongs_to :user

我在个人资料表上有user_id所以都设置在那里。

我想创建一个来自控制台的个人资料的用户:

User.create!(....).build_profile(...)

我只收到用户但没有个人资料。

User.new(...).build_profile(...).save
#=> can't modify frozen Hash

如何做到这一点?我确定我所做的是正确的。设计导致问题

1 个答案:

答案 0 :(得分:0)

我通过微小的更改执行了相同的操作,它按预期工作。

User.create!(name: 'Test user', email: "testuser@gmail.com", password: "password").build_profile.save

以下查询已执行。

BEGIN
  User Exists (35.8ms)  SELECT  1 AS one FROM `users` WHERE   (`users`.`email` = BINARY 'testuser@gmail.com' AND `users`.`deleted_at` IS NULL) LIMIT 1
 SQL (7.0ms)  INSERT INTO `users` (`name`, `email`, `encrypted_password`, `created_at`, `updated_at`) VALUES ('Test user', 'testuser@gmail.com', '$2a$10$adX3zznn6R5G94WY5CtCZOHAVYZCXBD/ASDdyoDU7jl8P9RmRJUmC', '2016-12-01 13:41:07', '2016-12-01 13:41:07')
  (2.6ms)  COMMIT
  Profile Load (0.4ms)  SELECT  `profiles`.* FROM `profiles` WHERE `profiles`.`user_id` = '43' LIMIT 1
 (0.1ms)  BEGIN
 SQL (0.3ms)  INSERT INTO `profiles` (`user_id`, `created_at`, `updated_at`) VALUES ('43', '2016-12-01 13:41:07', '2016-12-01 13:41:07')
 (1.7ms)  COMMIT  => true 

使用最少数据的模型代码。

    class User < ActiveRecord::Base
      has_one :profile
    end

个人资料模型

    class Profile < ActiveRecord::Base
      belongs_to :user  
    end

如果设计会为您创建一个问题,它必须在保存用户对象时在控制台中抛出验证错误。

编辑:个人资料迁移文件

   class CreateProfiles < ActiveRecord::Migration
     def change
       create_table :profiles do |t|
        t.string :user_id
        t.string :Description

        t.timestamps null: false
       end
    end
  end