[英]Ruby on Rails get an attribute from model via api query
這個問題的答案應該很簡單,但是我沒有通過活動記錄查詢指南 ,SO上的其他問題,或者通過在Rails控制台中搞亂來找到答案。
我只想通過活動記錄查詢接口查詢數據庫並返回第一個或最后一個條目的單個列的值,而不必遍歷整個表(稍后會解釋)。
有一種方法可以使用pluck執行此操作,但查詢消息的結構如下:
initial = Message.where("id = ?", some_id).pluck(:value).first
final = Message.where("id = ?", some_id).pluck(:value).last
不幸的是,這是一個非常低效的操作,因為它在返回所提供的id
匹配的每個記錄之外從所有記錄中提取value
屬性,然后返回第一個或最后一個條目。 我想基本上將語句重新排序為:
initial = Message.where("id = ?", some_id).first.pluck(:value)
final = Message.where("id = ?", some_id).last.pluck(:value)
不過,我得到一個NoMethodError解釋沒有方法pluck
的消息。 我試過各種各樣的方式:
initial = Message.where("id = ?", some_id).first(:value)
initial = Message.where("id = ?", some_id).first.select(:value)
...
但都會返回某種錯誤。 我知道回來了
哎呀
不知怎的,我的問題的一部分被切斷了(包括我最后的答案) - 我會看看我是否能找到它,但我探索了使用select()
方法,其中我發現select只接受一個參數含義必須構建一個查詢字符串,因為它不能使用像id = ?, some_id
這樣的可選參數,但后來我發現只是追加一個.value
(其中value
是你想要獲取的列屬性),所以我切換回where
方法如下面的答案所示。
答案就在問題中,但是如果你想做這樣的事情:
initial = Message.where("id = ?", some_id).pluck(:value).first
final = Message.where("id = ?", some_id).pluck(:value).last
將其更改為此(僅引用列名稱,在此示例中它是value
,但它可能是amount
或其他):
initial = Message.where("id = ?", some_id).first.value
final = Message.where("id = ?", some_id).last.value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.