2015-10-13 45 views
0

我有一種方法(的find_by_sql)內更新紅寶石對象輸出陣列內部的紅寶石對象是這樣的:軌道4/PostgreSQL的9.4 - 查詢和陣列

[#<deal id: 66480, opportunity_id: 4, admin_user_id: 1, created_at: "2015-09-20 18:37:29", updated_at: "2015-09-20 18:37:29", deal_available: true>] 

如何更新的對象的'deal_available'屬性在我的數據庫中的原始postgresql?

我嘗試不同的方式來寫,但我絆倒的事實,這是非常特殊:它是一個數組,裏面有一個Ruby對象,我必須設法告訴PostgreSQL相變化deal_available值:真實deal_available:false。

在本地,我想:logger.debug「這裏是更新生成的目標:

#{@deal_question[0]} 

,但我得到:

#<@deal_question:0x007fd9b3963270> 

這裏是@deal_question是如何創建

@deal_question = Deal.find_by_sql(
     " SELECT \"deals\".* 
     FROM \"deals\" 
     WHERE (opportunity_id = #{@deal.id} 
     AND deal_available = true) 
     ORDER BY \"deals\".\"id\" ASC LIMIT 1" 
    ) 

我甚至沒有postgresql查詢來推薦這裏,因爲首先我需要und erstand如何查詢數組內的ruby對象。

+2

你爲什麼不使用ActiveRecord,而不是寫原始SQL的? – Caillou

回答

1

實際上,您不需要原始SQL查詢即可更新@deal_question對象的deal_available屬性。

您可以使用update_attributes來實現。

# assuming @deal_question is an array 
@deal_question[0].update_attributes(deal_available: false) 

如果你真的想用原始SQL來更新屬性,然後做這樣:

array = [#<deal id: 66480, opportunity_id: 4, admin_user_id: 1, created_at: "2015-09-20 18:37:29", updated_at: "2015-09-20 18:37:29", deal_available: true>] 
# grab the object to be updated 
@deal_question = array[0] 
# build the sql query string 
sql = "UPDATE deals SET deal_available = false WHERE opportunity_id = #{@deal_question.id}" 
# execute the sql to update the object 
ActiveRecord::Base.connection.execute(sql) 
+0

謝謝,第一個建議不起作用,因爲它只更新objetc @ deal問題,而我想更新數據庫。你的第二個建議起作用。謝謝! – Mathieu