gpt4 book ai didi

ruby-on-rails - Rails first_or_create ActiveRecord 方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:28:23 28 4
gpt4 key购买 nike

first_or_create/first_or_create! 方法在 Rails 中有什么作用?

根据documentation , 方法“没有描述”...

最佳答案

来自Guides

先创建

first_or_create 方法检查 first 是否返回 nil。如果确实返回 nil,则调用 create。这在与 where 方法结合使用时非常强大。让我们看一个例子。

假设您想找到一个名为“Andy”的客户,如果没有,请创建一个并将其锁定属性设置为 false。你可以通过运行来做到这一点:

Client.where(:first_name => 'Andy').first_or_create(:locked => false)
# => #<Client id: 1, first_name: "Andy", orders_count: 0, locked: false, created_at: "2011-08-30 06:09:27", updated_at: "2011-08-30 06:09:27">

此方法生成的 SQL 如下所示:

SELECT * FROM clients WHERE (clients.first_name = 'Andy') LIMIT 1
BEGIN
INSERT INTO clients (created_at, first_name, locked, orders_count, updated_at) VALUES ('2011-08-30 05:22:57', 'Andy', 0, NULL, '2011-08-30 05:22:57')
COMMIT

first_or_create 返回已存在的记录或新记录。在我们的例子中,我们还没有名为 Andy 的客户,因此创建并返回了记录。

first_or_create!

如果新记录无效,您还可以使用 first_or_create! 引发异常。本指南未涵盖验证,但让我们暂时假设您临时添加

validates :orders_count, :presence => true

到您的客户端模型。如果您尝试在不传递 orders_count 的情况下创建新客户,则记录将无效并引发异常:

Client.where(:first_name => 'Andy').first_or_create!(:locked => false)
# => ActiveRecord::RecordInvalid: Validation failed: Orders count can't be blank

关于ruby-on-rails - Rails first_or_create ActiveRecord 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078818/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com