簡體   English   中英

在 Rails 5 中,“model.save”和“model.errors.empty”之間是否存在功能差異?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM