Rails 4 / postgresql 9.4 - 查询和更新数组中的 ruby 对象
Rails 4 / postgresql 9.4 - Query and update a ruby object inside an array
我有一个方法 (find_by_sql) 可以在数组 中输出 a ruby 对象,如下所示:
[#<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>]
如何在原始 postgresql 数据库中更新对象的 'deal_available' 属性?
我尝试了不同的方式来编写它,但我偶然发现它非常具体:它是一个数组,里面有一个 ruby 对象,我必须设法告诉 postgresql 将 deal_available: true 的值更改为 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 查询,因为首先我需要了解如何查询数组中的这个 ruby 对象。
您实际上不需要原始 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)
我有一个方法 (find_by_sql) 可以在数组 中输出 a ruby 对象,如下所示:
[#<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>]
如何在原始 postgresql 数据库中更新对象的 'deal_available' 属性?
我尝试了不同的方式来编写它,但我偶然发现它非常具体:它是一个数组,里面有一个 ruby 对象,我必须设法告诉 postgresql 将 deal_available: true 的值更改为 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 查询,因为首先我需要了解如何查询数组中的这个 ruby 对象。
您实际上不需要原始 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)