Ruby on Rails模型自定义to_s方法,排除nill或空值

时间:2013-01-13 16:05:33

标签: ruby-on-rails ruby

我定义了以下模型(使用Mongoid,非活动记录)

class Address
  include Mongoid::Document

  field :extra, type: String
  field :street, type: String
  field :area, type: String
  field :city, type: String
  field :code, type: Integer

  validates :street, :city, presence: true

  def to_s
    "#{extra},#{street},#{area},#{city},#{code}"
  end
end

我正在定义to_s方法,所以我可以使用:

<%= address %> 

在我的视图中,它会正确打印出地址。但是上面代码的问题,如果任何属性为空或者为零,我最终得到以下内容:

1.9.3p327 :015 > a
 => #<Address _id: 50f2da2c8bffa6e877000002, _type: nil, extra: "hello", street: nil, area: nil, city: nil, code: nil> 
1.9.3p327 :016 > puts a
hello,,,,,
 => nil 

使用一堆除非语句来检查值是空白还是零似乎是错误的方法(我可以让它像那样工作,但似乎是hackish)

这样做的更好方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用此

def to_s
  [extra, street, area, city, code].select{|f| !f.blank?}.join(',')
end

将元素存储在数组中,抛出无效值,与分隔符连接。