我有一個表A(:name,:flag),並且想要更新表中記錄的標誌列(如果某個條件的計算結果爲true)。在rails中更新表中的記錄
if A.find(300).flag == false
//Will this work -> A.find(300).flag = true
我該寫什麼?
我有一個表A(:name,:flag),並且想要更新表中記錄的標誌列(如果某個條件的計算結果爲true)。在rails中更新表中的記錄
if A.find(300).flag == false
//Will this work -> A.find(300).flag = true
我該寫什麼?
if A.find(300).flag == false
//Will this work -> A.find(300).flag = true
變化
A.find(300).update(flag: true) if A.find(300).flag == false
您可以添加方法a.rb
def self.update_if_false id
find(id).update(flasg: true) if A.find(id).flag == false
end
然後你可以使用它作爲A.update_if_false(300)
這將減少數據庫調用,如果標誌true:
個軌道4:
obj = A.find(300)
obj.update(flag: true) unless obj.flag
的Rails 3.2:
obj = A.find(300)
obj.update_attributes(flag: true) unless obj.flag
注:update
方法公之於衆,並在活動記錄4.
yes..it將工作帶鋸齒的update_attributes。 ..i在ruby2.0控制檯嘗試.. 假設你有所有屬性目前....
2.0.0-p481 :026 > Image.find(30).title = true
Image Load (7.8ms) SELECT "images".* FROM "images" WHERE "images"."id" = $1 LIMIT 1 [["id", 30]]
=> true
你可以繼續前進並添加更新語句..如果真的其他錯誤。
if A.find(300).flag == false
##do something
else
##do other thing
end
我需要在A.rb文件中寫下類似「def update」這樣的方法嗎? – user99785 2015-04-01 09:03:14
你不需要使用A.'find(300).falg == false'。它現在是在方法中,只是傳遞你的記錄'id'(例子300),它會更新'標誌爲真,如果它是假的' – Nermin 2015-04-01 09:12:38
在模型中做它將是一個糟糕的實現,我認爲。 – 2015-04-01 09:17:23