2014-03-26 357 views
4

當使用ActiveRecord集合代理返回的對象時,如果在視圖中罰款,則使用循環,但有時我只想將其中一個哈希公共屬性轉換爲數組。我覺得我做了很多,這將導致這似乎是有點繁瑣:將哈希數組轉換爲數組

forum_roles = [] 

@forum #=> [{id: 0, name: 'a'},{id: 1, name: 'b'}] 

@forum.each do |role| 
    forum_roles << role.name 
end 

forum_roles #=> ['a','b'] 

只是想知道是否有在['a','b']

回答

5

到達使用Array#map一個更簡單的方法,當你有一個數組哈希

forum_roles = @forum.map { |role| role[:name] } 
forum_roles # ['a','b'] 

UPDATE:

隨着ActiveRecord對象,有作爲@vee評論

012一shorcut
@forum.map(&:name) 

如果你有一個ActiveRecord的關係和你只想要一個列的一個陣列,使用pluck

@forum.pluck(:name) 
+1

或者更短:'@ forum.map(:名稱)' – vee

+0

@vee'& :名稱'不正確。這會在每個散列上調用'role.name()',而不是'role [:name]'。這將適用於一組對象,但不適用於散列數組。 – meagar

+0

@meagar,但'@ forum'是一個AR關係,所以假設'name'是一個大概爲'Role'對象的屬性是不是很安全? – vee