2015-04-01 72 views
0

我有一個表A(:name,:flag),並且想要更新表中記錄的標誌列(如果某個條件的計算結果爲true)。在rails中更新表中的記錄

if A.find(300).flag == false 
//Will this work -> A.find(300).flag = true 

我該寫什麼?

回答

0
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)

+0

我需要在A.rb文件中寫下類似「def update」這樣的方法嗎? – user99785 2015-04-01 09:03:14

+0

你不需要使用A.'find(300).falg == false'。它現在是在方法中,只是傳遞你的記錄'id'(例子300),它會更新'標誌爲真,如果它是假的' – Nermin 2015-04-01 09:12:38

+0

在模型中做它將是一個糟糕的實現,我認爲。 – 2015-04-01 09:17:23

0

這將減少數據庫調用,如果標誌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.

0

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