簡體   English   中英

Ruby on Rails通過api查詢從模型中獲取屬性

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

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