型号: 用户has_one Ucellar Ucellar belongs_to用户 我已从多个来源确认这些设置正确。对于后代,这是这两个模型的顶部。
class User < ActiveRecord::Base
has_many :authorizations
has_one :ucellar
validates :name, :email, :presence => true
这实际上是整个Ucellar模型。
class Ucellar < ActiveRecord::Base
belongs_to :user
end
Ucellar有一个名为user_id的列,我知道这是必要的。我创建用户的应用程序部分使用create_with_oath方法。以下是整个User类。请注意create方法的第二行。
class User < ActiveRecord::Base
has_many :authorizations
has_one :ucellar
validates :name, :email, :presence => true
def create
@user = User.new(user_params)
@ucellar = @user.create_ucellar
end
def add_provider(auth_hash)
# Check if the provider already exists, so we don't add it twice unless authorizations.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"])
Authorization.create :user => self, :provider => auth_hash["provider"], :uid => auth_hash["uid"]
end
end
def self.create_with_omniauth(auth)
user = User.create({:name => auth["info"]["name"], :email => auth["info"]["email"]})
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
编辑: 忘了总结症状。在创建时,用户在数据库中,没有抛出异常,也没有任何表示出现任何问题。但是,永远不会创建相关的ucellar。根据文档Here,create方法应该创建AND保存相关的ucellar。
答案 0 :(得分:0)
它也应该创造ucellar。 尝试通过调用以下方法获取错误消息:
raise @ user.errors.full_messages.to_sentence.inspect
答案 1 :(得分:0)
我不确定为什么这不起作用,但我最终只是将此代码移出用户控制器的创建操作,并在创建用户的操作之后直接放置它。它解决了我的问题。谢谢大家的帮助!