gpt4 book ai didi

ruby-on-rails - 如果 ActiveRecord::Base#create 在 3.2.13 中被弃用,我如何仍然使用它?

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:44 25 4
gpt4 key购买 nike

我正在运行 3.2.13 并遵循标准“railstutorial.org”我遇到了一个问题。我仍然无法摆脱 C++/Java 编程思维模式,并试图理解正常的调用约定。

我可以像这样使用我的类 ( User < ActiveRecord::Base):

User.create(email: "email", password: "password", password_confirmation: "password")

doc for the method表明它已被弃用。我也没有看到对 def create 的引用在我的 ActiveRecord gem 源中。

既然调用没有使用哈希,那么这种调用的名称是什么?如果参数包含在大括号中是否相同?

最佳答案

这里有两个问题。

第一个问题:方法弃用

this commit 中进行了更改.

创建 方法是 removed来自 ActiveRecord::Baseinserted放入名为 ActiveRecord::Persistence 的单独模块中。

关于 APIDock 告诉您的内容...该方法已“弃用或移动”。如果您查看建议列表的一半,您将看到 ActiveRecord::Persistence#create。这是方法移动到的位置。

请注意,ActiveRecord::Persistence#create 是在内部使用的。在您的应用程序代码中对 ActiveRecord 模型(而非对象)调用create 时,您正在调用 ActiveRecord::Relation#create .

ActiveResource::Base#create 是在 Rails 2.0 中引入的,与 ActiveRecord 无关。

第二题:哈希作为参数

检查 source对于 ActiveRecord::Relation#create 显示以下内容:

# File activerecord/lib/active_record/relation.rb, line 85
def create(*args, &block)
scoping { @klass.create(*args, &block) }
end

看到 splat 参数 *args 了吗?这告诉 Ruby 将所有剩余的参数传递给 args,无论有多少。 Ruby/Rails 的 ducktyping 魔术看到了一堆键值对并假定它是一个散列。

Rails 要求参数中的散列值使用花括号有点松散,就像将所有参数括在括号中一样松散。通常,当您传入一系列键值对时,Rails 会推断出一个散列。有时这会在传递多个哈希值时造成麻烦,例如在复杂的 form_for 方法中。

如果您的行为不稳定且缺少大括号,请插入大括号。明确定义哈希将允许您确保正确的行为。

阅读更多关于 Ruby splats 的信息 here .

关于ruby-on-rails - 如果 ActiveRecord::Base#create 在 3.2.13 中被弃用,我如何仍然使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938494/

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