-1

我可以通过以下方式获取对象属性:

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

有了这个循环:

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

如果我有 3 个属性,我会得到 3 个属性。

我只想attr_name得到nameemail属性

我怎样才能在这个循环中丢弃或排除field :second_name

谢谢

4

3 回答 3

2

您可以像这样在循环中添加一个条件:

@object.attributes.each do |attr_name|
  unless attr_name.eql?('second_name')
    # Do stuff here
  end
end
于 2012-10-18T17:45:57.767 回答
2

目前尚不清楚您包含或排除特定属性的标准是什么。

如果你想要一个黑名单:

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

 
如果你想要一个白名单:

(@object.attributes & [:name, :email, :socks]).each{ ... }
于 2012-10-18T18:04:53.770 回答
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) }
于 2014-08-20T19:43:43.390 回答