2015-02-09 85 views
0

Servernode是Rails Model Class。lambda選擇地圖差異軌道4

當我嘗試使用lambda時,我發現了一些奇怪的東西。

aaa = lambda {|node| node.available="Available"} 
Servernode.select(&:aaa) 

=>它可以返回ModelObject的陣列滿足條件

但是,當我嘗試

bbb = lambda {|node| node if node.available="Available"} 
Servernode.map(&:bbb) 
NoMethodError: undefined method `map' for #<Class:0x000000067759b0> 

結果不出我所料,不知道爲什麼?

感謝您的幫助!

回答

1

這是因爲selectActiveRecord::QueryObject方法。我認爲你已經將它與select方法混淆,用於Ruby Enumerablemap方法也適用於enumerables

+0

感謝您的幫助。當我嘗試使用 'Servernode.all.class.map {| node |節點如果node.status = 「Availalbe」}' 我 'NoMethodError:用於Servernode :: ActiveRecord_Relation未定義的方法'地圖」:Class' 但是(**菱是在Servernod模型類**一個範圍) 'Servernode.available.map {| node |如果節點= node.status「Availalbe」}' 它可以返回數組....真的沒有想法監守我希望** Servernode.available仍然是不可枚舉在這種情況下** – CWC 2015-02-09 10:52:44

+1

那是因爲你剛剛鏈'地圖'在第一個例子的'class'後。 'ServerNode.all.class'將返回一個**類**對象,所以你不能將'map'鏈接到它。嘗試'ServerNode.all.map'它會做的伎倆。 爲了您的第二個例子,當你因爲當你調用一個'scope'方法一類執行'ServerNode.available',您可以鏈接'map'它,它返回一個**的ActiveRecord ::關係**這可通過紅寶石「Enumerable」方法鏈接。 – Finks 2015-02-09 11:00:02

+0

謝謝!它有很多幫助。 – CWC 2015-02-09 11:05:27