2012-10-18 168 views
-1

我可以得到對象的屬性:遍歷對象屬性與除Ruby on Rails中的屬性與

Class Object 
field :name 
field :email 
field :second_name 
end 

有了這個循環:

<% @object.attributes.each do |attr_name| %> 
.... 
<% end %> 

如果我有3個屬性,我得到3個屬性。

我只想要得到的nameattr_nameemail屬性

我怎麼能在這個循環中丟棄或排除field :second_name

謝謝

+0

黑名單:'(@ object.attributes - [:SECOND_NAME])。每個{...}'白名單:'[:姓名,:郵箱]。每{...}' – Phrogz

回答

2

你可以只添加循環內的條件像這樣:

@object.attributes.each do |attr_name| 
    unless attr_name.eql?('second_name') 
    # Do stuff here 
    end 
end 
+3

就我個人而言,如果attr_name =='second_name''在功能上相同,但是省略了縮進方法的其餘部分,我喜歡'next。 – MrTheWalrus

+0

非常感謝你 – hyperrjas

2

目前還不清楚你的標準包括或排除特定屬性。

如果你想有一個黑名單:

(@object.attributes - [:second_name]).each{ ... } 
# Alternatively: 
@object.attributes.reject{ |n| n==:second_name }.each{ ... } 

 
如果你想有一個白名單:

(@object.attributes & [:name, :email, :socks]).each{ ... } 
+0

非常感謝! – hyperrjas

0

黑名單:

exclude = [:a, :b, :c] 
@object.attributes.reject { |k,v| only.include?(k.to_sym) } 

白名單:

only = [:a, :b, :c] 
@object.attributes.select { |k,v| only.include?(k.to_sym) }