2012年4月27日金曜日

配列をAPIで表示して、モデルでクラス分けする(上級編)

最後に残ったballsの配列を表示します。
これは少しややこしいです。
ball.rbを作成します。
class Ball
  attr_accessor :change, :level

  def initialize(hash)
    @change = hash[:change]
    @level = hash[:level]
  end
end
/model/user.rbのbefore_saveに追加します。
self.balls = balls.map do |ball|
  h = {}
    [ :change, :level ].each do |key|
     h[key] = ball.send(key).to_i
  end
  h
end
/mode/user.rbに作成します。
def balls
    case self[:balls]
    when String
      YAML.load(self[:balls]).map { |e| Ball.new(e) }
    when Array
      self[:balls].map { |e| e.kind_of?(Ball) ? e : Ball.new(e) }
    end
  end

  def balls=(value)
    case value
    when Hash
      self[:balls] = value.keys.sort.map do |key|
        h = {}
        value[key].each do |k, v|
          h[k.to_sym] = v
        end
        h
      end
    when Array
      self[:balls] = value
    end
  end
xmlに追加します。
xml.balls do
   balls.each do |b|
         xml.ball do
         xml.change b.change
         xml.level b.level
      end
   end
end
jsonに追加します。
:balls => u.balls
これで問題なく全ての情報が表示されました〜

0 件のコメント:

コメントを投稿