王筝的博客
ruby学习

 

https://github.com/rails/jbuilder  的set!方法重构接口,

因为grape没法使用 jBuilder 的缓存,所以直接用 Rails 写 API

(1)多个图片

images: {
  poster: {
    url: "http://r4.ykimg.com/0510000057CD17166714C04FDC0628CE",
    md5: "ee63b0a11cb1e39331d5ce11d38fceec"
},
  right_top_corner: {
    url: "http://r1.ykimg.com/0510000057CEA19C6714C063660BEB44",
    md5: "e50d520de494538d4633086d46845a81"
  }
},

原来的方法为

 json.images do
    component.pictures.each do |p|
      if p.name == 'poster'
        json.poster do
          json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
          json.md5 p.md5
        end
      end
      if p.name == 'icon'
        json.icon do
          json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
          json.md5 p.md5
        end
      end
      if p.name == 'background'
        json.background do
          json.url "http://r#{rand(4) + 1}.xxx.com/#{p.url}"
          json.md5 p.md5
        end
      end
  end 
end

精简后为

  json.images do
    component.pictures.each do |p| 
      json.set! p.name do
        json.set! :url, "http://r#{rand(4) + 1}.ykimg.com/#{p.url}"
        json.set! :md5, p.md5
      end 
    end 
  end 

(2)hints 是一个 hash,遍历 Hash 的文档 http://ruby-doc.org/core-2.3.1/Hash.html#method-i-each

hint: {
  left: "left",
  right: "111"
},

精简前

  json.hint do
    if component.hints.key?("left")
      json.left component.hints["left"]
    end 
    if component.hints.key?("center")
      json.center component.hints["center"]
    end 
    if component.hints.key?("right")
      json.right component.hints["right"]
    end 
  end

精简后

  json.hint do
    component.hints.each do |key,value|
      json.set! key, value
    end
  end