[英]filter active record results in ruby
我對Ruby on Rails完全陌生。 我正在使用現有的API,並且有一個SQL查詢通過以下命令執行:
results = ActiveRecord::Base.connection.select_all(query)
結果的輸出為:
{"availability"=>"In Stock", "available_to_purchase"=>1}
{"availability"=>"Void", "available_to_purchase"=>0}
{"availability"=>"Out of Stock", "available_to_purchase"=>0}
{"availability"=>"In Stores Only", "available_to_purchase"=>0}
我知道要基於available_to_purchase
為0獲取可用性的所有值。我已經嘗試過:
res = results.where(available_to_purchase: 0)
但是我收到一個錯誤消息:
undefined method `where'
我也嘗試過:
res = results.select { |result| result.available_to_purchase == 0 }
但是我最終遇到了錯誤:
undefined method `available_to_purchase'
我知道我可以循環查看並檢查available_to_purchase為0,然后將其添加到新數組中。 但是,有什么方法可以根據列的值快速過濾活動記錄結果?
直接通過connection
避免了ActiveRecord
旨在為您提供的幾乎所有服務。 首先,請閱讀Active Record基礎知識 。 Rails指南組合得非常好,應該包含使用框架的前幾周所需的一切。
您沒有獲得期望的where
方法的原因是,它是ActiveRecord::Relation
上的方法,而select_all
僅返回哈希列表。 到您致電results.where
,為時已晚。 您需要實例化一個Product
模型(或與您的表名匹配的任何模型),它很簡單:
class Product < ActiveRecord::Base
end
Rails會看products
表(再次,我做你的表名)的屬性Product
了,然后你就可以根據他們的查詢where
:
results = Product.where(available_to_purchase: 0)
該模型還將具有您嘗試使用的訪問器方法,因此您可以執行諸如results[0].available_to_purchase == 0
或results[0].availability = 'Already in your house'
。
為了在結果上調用.where,您需要一個活動記錄關系的實例。 常規ActiveRecord查詢將返回此結果。 select_all,但是,返回一個哈希數組。 數組沒有where方法。
res = results.select { |result| result.available_to_purchase == 0 }
您的第二個錯誤是因為您嘗試錯誤地訪問ruby哈希鍵。 必須作為result['available_to_purchase']
訪問屬性result['available_to_purchase']
這是您問題的答案。 我確實同意其他人的觀點,盡管您應該使用ActiveRecord
。
results.select { |result| result['available_to_purchase'] == 0 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.