2013-02-14 88 views
0

這個問題的答案應該很簡單,但我還沒有找到通過active record querying guide,其他問題在SO上或通過在Rails控制檯中搞亂的問題。Ruby on Rails通過API獲取模型屬性查詢

我只想通過活動記錄查詢接口查詢數據庫,並返回第一個或最後一個條目的單個列的值,而不必遍歷整個表(稍後將解釋)。

有一種方法與勇氣做到這一點,在查詢消息的但是結構如下:

initial = Message.where("id = ?", some_id).pluck(:value).first 
    final = Message.where("id = ?", some_id).pluck(:value).last 

不幸的是,這是一個非常低效的操作,因爲它採摘的value屬性每紀錄在提供的id上有匹配,在返回第一個或最後一個條目之前。我想基本上重新排序語句是沿着線的東西:

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方法,如下面的答案所示。

回答

2

答案是問題,但如果你試圖做這樣的事情:

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