[英]Rails : model.save returns false but models.errors is an empty hash
[英]In Rails 5, is there a functional difference between "model.save" and "model.errors.empty?"?
我正在使用 Rails 5。我的控制器中有這個邏輯......
@user = UserService.create_user(params)
if @user.errors.empty?
render :create, :status => :ok
上面和上面有什么區別嗎
@user = UserService.create_user(params)
if @user.save
render :create, :status => :ok
我正在嘗試決定是使用“.save”還是“.errors.empty?” 邏輯。
兩者都只是劣等的做事方式:
@user = UserService.build_user(params) # just instanciate the record
if @user.save
# ...
else
# ...
end
功能上有區別嗎? 是的。 .save
觸發模型上與保存可能產生副作用的記錄相關的所有回調。 如果您只想檢查它是否已保存,請使用.persisted?
. .errors.empty?
是對.valid?
的不良模仿.valid?
.
兩者都不會炸毀任何東西,但它仍然困擾着我,因為它使您的意圖變得不那么清晰。 如果您執行以下操作,它還會創建兩個查詢(並觸發更新回調):
@user = UserService.create_user(params)
@user.foo = bar
if @user.save
# ...
else
# ...
end
當您想將參數與來自其他地方(如會話)的信息合並時,這非常常見。
render :create, status: :ok
也很奇怪。 通常你只想重定向到新創建的資源,因為這會影響歷史記錄,這樣瀏覽器實際上會返回到正確的頁面而不是/users
如果用戶點擊后退按鈕。 對於 api,您可以使用status: :created, location: @user
或資源的 JSON 表示進行響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.