尝试使用has_one关系创建数据库项,没有例外,但仍然没有项

时间:2014-06-02 05:58:24

标签: ruby ruby-on-rails-3

型号: 用户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。

2 个答案:

答案 0 :(得分:0)

它也应该创造ucellar。 尝试通过调用以下方法获取错误消息:

  

raise @ user.errors.full_messages.to_sentence.inspect

答案 1 :(得分:0)

我不确定为什么这不起作用,但我最终只是将此代码移出用户控制器的创建操作,并在创建用户的操作之后直接放置它。它解决了我的问题。谢谢大家的帮助!