我有一個哈希對象:更新哈希與軌道4
@chosen_opportunity = {"id"=>66480, "prize_id"=>4, "admin_user_id"=>1, "created_at"=>2015-09-20 18:37:29 +0200, "updated_at"=>2015-09-20 18:37:29 +0200, "opportunity_available"=>true}
怎樣的deal_available
的值更新爲假?
我試過,但它失敗:
@chosen_opportunity['deal_available'] = false
@chosen_opportunity.save
控制器/ deal_controller.rb:
def show_opportunity
@deal = Deal.friendly.find(params[:id])
@chosen_opportunity = Opoortunity.find_by_sql(
" SELECT \"opportunities\".*
FROM \"opportunities\"
WHERE (deal_id = #{@deal.id}
AND opportunity_available = true)
ORDER BY \"opportunities\".\"id\" ASC LIMIT 1"
)
# comes from http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class
@chosen_opportunity[0].attributes['opportunity_available'] = false
@chosen_opportunity[0].save
respond_to do |format|
format.js
end
end
我可以更新opportunity_available
從新政控制器內部的機遇模型中的價值?這就是爲什麼它不起作用?
我知道我可以使用Active Record,但我需要使用原始的PostgreSQL進行第一次查詢。感謝您對這種非Rails-y方式的理解。
您肯定需要使用ActiveRecord。我看到你的其他帖子(http://stackoverflow.com/questions/33106585/rails-4-postgresql-9-4-query-and-update-a-ruby-object-inside-an-array),你是通過做一個原始的SQL查詢來獲得這個散列,這個查詢可以很容易地用ActiveRecord完成。而Activercord對象可以更新數據庫,這就是他們的意圖。 – Caillou
不是非常Rails-y,但應該可以使用原始的postgresql。堅持試圖設法讓這個與postgresql一起工作。 – Mathieu
同意原始SQL需要轉換爲使用ORM。使用ORM的一個要點是添加數據庫抽象層,使您可以輕鬆地將應用程序從一個DBM移動到另一個DBM。只要添加原始SQL,您就開始將自己綁定到特定的DBM並使其難以移動。 –