如何通过活动记录关联来注册设计中的用户?

时间:2019-04-19 08:11:40

标签: ruby-on-rails devise devise-token-auth

我正在使用rails和devise_token_auth进行身份验证的实验。我成功为devise_token_auth创建了一个新用户。我已经在Google或此论坛的此处搜索过此内容,但找不到有关如何执行此操作的可靠文档。但是,如果您提供给我链接。对于一个新的Rails开发人员进行研究将更加感激。我正在尝试与用户添加个人资料。在用户表中,我添加了配置文件的引用,这是结果。

enter image description here

您可以看到我的用户表中添加了profile_id。在我的用户模型中,我有这个。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :omniauthable
  include DeviseTokenAuth::Concerns::User 

  belongs_to :profile
end

,以及在我的个人资料模型中。我有这个

class Profile < ApplicationRecord
    has_one :user
end

在我的application_controller.rb中。我有这个

class ApplicationController < ActionController::Base
    include DeviseTokenAuth::Concerns::SetUserByToken
    before_action :configure_permitted_parameters, if: :devise_controller?
    #protect_from_forgery with: :exception 

    protected

    def configure_permitted_parameters
        registration_params = [ :name, :city, :email, :password, :password_confirmation, :profile => [:address]]
        devise_parameter_sanitizer.permit(:sign_up, keys: registration_params)
    end
end

我尝试使用邮递员注册用户来设计。我有这些参数要发送

{
    "name": "rayn",
    "email": "helloworld.232910@gmail.com",
    "password": "sample123",
    "password_confirmation": "sample123",
    "city": "green",
    "profile": {
        "address": "address here"
    },
    "confirm_success_url": "http://localhost:3000"
}

但是当我提交这个时,我得到了这些错误

{
    "status": 500,
    "error": "Internal Server Error",
    "exception": "#<ActiveRecord::AssociationTypeMismatch: Profile(#70239077093620) expected, got {\"address\"=>\"address here\"} which is an instance of ActiveSupport::HashWithIndifferentAccess(#47165751411560)>",
    "traces": {

我不知道我的模型是否正确。我只想为每个用户添加个人资料。根据我在代码中所做的来纠正我。如何注册添加了个人资料的用户?

1 个答案:

答案 0 :(得分:0)

我认为您错过了accepts_nested_attribute,因此active_record无法遵循该对象的处理方法-假设Profile中有一个列地址:

# user.rb
accepts_nested_attributes_for :profile