Rails 4 / postgresql 9.4 - Query and update a ruby object inside an array

末鹿安然 提交于 2019-12-25 03:38:21

问题


I have a method (find_by_sql) that outputs a ruby object inside an array like this:

[#<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>]

How can I update the object's 'deal_available' attribute inside my database in raw postgresql ?

I tried different ways to write it but I stumble on the fact that it's very specific: it's an array, and inside there is a ruby object and I must manage to tell postgresql to change the value of deal_available: true to deal_available: false.

In local, I tried: logger.debug "Here is the resulting object for update:

 #{@deal_question[0]}

but I get:

#<@deal_question:0x007fd9b3963270>

Here is how @deal_question is created

@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"
    ) 

I don't even have a postgresql query to suggest here because first I need to understand how to query this ruby object inside the array.


回答1:


You actually don't need a raw SQL query to update the deal_available attribute of your @deal_question object.

You can use update_attributes to achieve that.

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

If you really want to use raw sql to update the attribute, then do this way:

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)


来源:https://stackoverflow.com/questions/33106585/rails-4-postgresql-9-4-query-and-update-a-ruby-object-inside-an-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!