0

次のモデルが定義されています(アクティブなレコードではなく、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 %> 

私の見解では、住所が正しく出力されます。ただし、上記のコードの問題は、属性のいずれかが空白または nil の場合、次のようになります。

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 

値が空白か nil かを確認するために一連の until ステートメントを使用するのは、間違った方法のように思えます (そのように動作させることはできますが、ハックのようです)。

これを行うより良い方法は何ですか?

4

1 に答える 1

2

これを使用できます

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

要素を配列に格納し、無効な値をスローし、セパレーターで結合します。

于 2013-01-13T16:07:21.667 に答える