簡體   English   中英

Rails 4:ActiveRecord :: StatementInvalid與update_all()的行為不一致

[英]Rails 4: ActiveRecord::StatementInvalid with inconsistent behavior of update_all()

在基於Rails 4的應用程序的class_controller中,我有以下兩種方法:

checkout(),checkin()

這兩種方法對數據庫的操作相反: checkout()將String值插入checkout字段/列,而checkin()checkout字段/列中刪除String值。

兩種方法中的代碼非常相似:

def checkout
   @class = Class.where("id = ?", params[:class_id])
   @class.update_all(":checkout" => "done blah blah")
end

def checkin
   @class = Class.where("id = ?", params[:class_id])
   @class.update_all(":checkout" => "")  # set it empty or nil??
end

url映射到checkout()的調用工作正常,但是,當checkin()方法引發以下錯誤時。 看起來update_all方法的行為不一致:

PG :: UndefinedColumn:錯誤:關系“類”的列“:checkout”不存在線1:更新“類” SET“:checkout” =” WHERE(id ='1')^:更新“類” SET “:checkout” =''WHERE(id ='1')

"checkout":checkoutupdate_all

 @class.update_all(:checkout => "done blah blah")

Ruby中的符號不必加引號。

您說第一個版本有效,我感到很驚訝。 如果沒有名為:checkout的列,它也應該失敗。

我建議將這兩個版本“修復”為更常見的Ruby慣用語:

def checkout
  @class = Class.where(id: params[:class_id])
  @class.update_all(checkout: 'done blah blah')
end

def checkin
  @class = Class.where(id: params[:class_id])
  @class.update_all(checkout: '')  # set it empty or nil?
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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