gpt4 book ai didi

ruby-on-rails - 为什么/何时检查 Object.persisted?与 Object.save

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

我只是想了解我在 Ruby 代码中看到的两种模式。

在 Michael Hartl 的标准教程中,代码是这样的:

def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end

这是我非常习惯的模式。我刚刚实现了 Devise,但是它的模式是这样的:

def create
build_resource(sign_up_params)

resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end

为什么设计检查 if 语句中的 resource.persisted? 而不是 resource.save?什么时候你想用一个而不是另一个?

谢谢!

最佳答案

Object#persisted? 检查对象是否存在于数据库中。

Object#save 对数据库进行更改,根据操作结果返回 true 或 false,并在失败时向该事件记录对象包含错误消息。

例子A

成功保存新记录将使其持久化:

if new_object.save
# It's successfully saved (and persisted)
assert new_object.persisted?
else
# It's not saved, therefore not persisted
assert_not new_object.persisted?
end

例子B

保存现有记录(对其进行编辑)不会更改其持久性:

# The record is already in the DB, so it is persisted
assert record.persisted?

if record.save
# update succeeded
else
# update failed
end

assert record.persisted?

关于ruby-on-rails - 为什么/何时检查 Object.persisted?与 Object.save,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276706/

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