簡體   English   中英

過濾活動記錄結果中的紅寶石

[英]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 == 0results[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM