我正在运行3.2.13并且遵循标准“railstutorial.org”我遇到了一个问题。我仍然处于从C ++ / Java编程思维模式切换的过程中,并试图理解正常的调用约定。
我可以使用我的班级(User < ActiveRecord::Base
),如:
User.create(email: "email", password: "password", password_confirmation: "password")
doc for the method表示已弃用。我也没有在ActiveRecord gem源中看到def create
的引用。
由于调用没有使用Hash,这种调用的名称是什么?如果参数用大括号括起来是否相同?
答案 0 :(得分:4)
这里有两个问题。
在this commit中进行了更改。
create
方法从ActiveRecord::Base
和removed inserted进入名为ActiveRecord::Persistence
的单独模块。
关于APIDock告诉你的内容......该方法“已弃用或已移动”。如果您查看建议列表的中间位置,则会看到ActiveRecord::Persistence#create
。这是方法移动到的地方。
请注意,ActiveRecord::Persistence#create
在内部使用。在应用程序代码中的ActiveRecord 模型(非对象)上调用create
时,您正在调用ActiveRecord::Relation#create
。
ActiveResource::Base#create
在Rails 2.0中引入,与ActiveRecord无关。
检查ActiveRecord::Relation#create
的{{3}}会显示以下内容:
# 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 magic看到了一堆键值对,并假设它是一个哈希值。
Rails有点松散,要求在参数中使用大括号括起哈希,就像在括号中包装所有参数一样松散。通常,当您传入一系列键值对时,Rails将推断哈希值。有时这会在传入多个哈希值时导致麻烦,例如在复杂的form_for
方法中。
如果您的行为不稳定且没有大括号,请插入它们。明确定义哈希将允许您确保正确的行为。
阅读有关Ruby splats source的更多信息。
答案 1 :(得分:1)
“弃用”并不意味着“不再可用”。这意味着 将很快不再可用。