0

Ben rails_api gem kullanarak raylar api oluşturma, bir model adını User ve Identity adında başka bir model var.Raylar iç içe nitelikler tip mispatch hatası

Karşılıklı Sorunum nested_attributes ile params kullanıcı oluşturmaya çalıştığında bana verir ActiveRecord::AssociationTypeMismatch error

Modelleri

o User.rb edilir

class User < ActiveRecord::Base 
    enum gender: [:male , :female] 
    has_many :identities ,dependent: :destroy 
    accepts_nested_attributes_for :identities 
    has_secure_password 
end 

Identity.rb

class Identity < ActiveRecord::Base 
    belongs_to :user 
    validates_associated :user 
end 

Kontrolörler

users_controller.rb

class UsersController < ApplicationController 

def create  
    @user = User.new user_params 
    #@user.build.identities(user_params[:identities]) 
    if @user.save 
     render json: @user , status: :created 
    else 
     render json: @user.errors, status: :unprocessable_entity 
    end 
end 

private 
def user_params 
    json_params = ActionController::Parameters.new(JSON.parse(request.body.read)) 
    json_params.require(:user).permit(:first_name, :last_name, :email, :password, :image, :location, :gender,{identities: [:provider, :uid, :url, :token, :expires_at]}) 
end 

Ben json nesnesi olarak veriyi gönderiyorum:

enter image description here

Tür bana bu sorunu çözmeye yardımcı:

Request body

Bu sunucu konsolda hatadır. Bütün olası çözümleri denedim.

+0

Sanırım bunun nedeni, kimlikleri özniteliğine bir dizi göndermenizdir! Bir Kimlik Kaydı'nı özdeşleştirmek için kimliklere vermelisiniz! –

+1

Sence json_params.require (: kullanıcı) .permit (: first_name,: last_name,: email,: password,: image,: location,: gender, {identities: [: sağlayıcı,: uid,: url ,: token,: expires_at]}) 'json_params.require olmalıdır (: kullanıcı) .permit (: first_name,: last_name,: email,: password,: image,: location,: gender, identities_attributes: [: sağlayıcı, : uid,: url,: jeton,: expires_at]) '? – dp7

cevap

1

Sizin güçlü param Şimdiden teşekkürler böyle olmalı:

json_params.require(:user).permit(:first_name, :last_name, :email, :password, :image, :location, :gender,identities_attributes: [:provider, :uid, :url, :token, :expires_at]) 
+0

Güçlü bir param değiştirdim ama 'Unpermitted parameter: identities error' oluştu. – zaingz

+0

kimlikler_attributes paramlarında kimlik dizisi göndermelisiniz: [{}] – Faizan

0
json_params.require(:user).permit(:first_name, :last_name, :email, :password, :image, :location, :gender, :identities => [:provider, :uid, :url, :token, :expires_at]) 

bu mevcut yolla gibi sorunu çözer.