如果element.to_sym为空,则从数组中删除元素

时间:2014-08-21 01:38:30

标签: ruby ruby-on-rails-3

我有一个API类,它就像这样订购:

class APIDocument
  ...
  def order
    @order = []
    @document.template.order.split('_').each do |o|
      @order << o unless o.to_sym == ''
    end
    @order
  end
  ...
end
在其中一种情况下,

o.to_sym等于'',但o仍会添加到数组中。有什么想法吗?

@document.template.order => 'photo_info_disclaimer'
api = APIDocument.new(@document)
api.photo => ''
api.order => ['photo', 'info', 'disclaimer']

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

  

o.to_sym在其中一个案例中等于''

你确定吗?我假设oString,在这种情况下,to_sym将始终生成Symbol。这意味着o.to_sym永远不会等于空String'')。

也许你正在寻找这些方面的东西:

@orders = @document.template.order.split('_').delete_if { |s| s.empty? }

答案 1 :(得分:0)

@order << o unless o.to_sym == :'' 
''.class => String
:''.class => Symbol
  • 在ruby中,String与Symbol不同。 String是可变变量,但Symbol是不可变变量。符号对象与代码中的所有上下文相同。

答案 2 :(得分:0)

啊,感谢@August,这很有效:

def order
  @order = @document.template.order.split('_').delete_if { |o| self.send(o).blank? }
end