【问题标题】:Create a user with another model使用另一个模型创建用户
【发布时间】:2017-06-24 18:55:58
【问题描述】:

我正在尝试从另一个模型(Corporacion)创建用户, 我在Corporacion模型中写了这个:

after_create :createUser

def createUser
    @user = Usuario.create(nombre: "aa", corp_id: 3, email: "aa@aa", password: 123456, password_confirmation: 123456, rol: 3)
    @user.save
end

但是当我创建一个 Corporacion 时,并没有创建用户(我使用的是 rails 4.1 和 ruby​​ 1.9.3)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 model-view-controller


    【解决方案1】:

    调用create 保存有效对象。所以你不需要在那之后打电话给save。但我们知道它没有得救。首先怀疑是验证错误。

    要调试您的储蓄,您可以使用create! 方法而不是create。如果您的保存失败,它将引发异常。但是使用create! 以及其他“爆炸”方法并不是很好的做法。所以我不建议你在生产代码中使用它。

    如果create! 有效而create 无效,还有一个提示: 在您的用例中执行创建的最佳实践如下:

    def createUser
      user = Usuario.new(nombre: "aa", corp: self, email: "aa@aa", password: 123456, password_confirmation: 123456, rol: 3)
      user.save ? true : user.errors
    end
    

    如果您的 user 已创建,则该代码将返回成功结果 (true),否则会发生验证错误。因此,您将能够在调用createUser 的代码中正确处理您的错误。而且它还会揭露为什么你的储蓄现在不起作用。

    【讨论】:

    • 这是我的小费,但不是错误,抱歉
    • 等一下。在您的生产代码中使用create! 和其他“爆炸”方法不是很好的做法。但是,它可能对调试有用。所以你最好找出为什么你的简单create 不起作用。仍然认为这笔交易是您的 Corporacion 在您创建 User 时不存在。
    • 我试图在保存公司后创建用户,但它也被忽略了,但是当我使用“!”它有效
    • 好的,我用对象创建的最佳实践再次更新了我的答案。看看这个。抱歉多次更新,我现在有点分心,但想帮忙:)
    • 如果我尝试让模型进入循环,因为它在创建 Corporacion 后尝试创建 Corporacion(请记住该函数在 Corporacion 模型中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2012-01-10
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多