close

先來說說Rails 2.3中即將問世的Object#try吧

有時候我們不知道某個物件是否能夠回應某個呼叫,我們可以用object.respond_to?(method)來判斷傳回的是true還是false,因此我們可以藉由這個特性來達到我們要的目的:

f = Factory.first
puts f.category.try(:name)

只要有辦法回應就會直接呼叫name這個member function;但是別忘記了,現在還是Rails 2.2 ...

所以,我們可以自己寫一個try來用,先在Rails Project Root底下的lib新增一個try.rb,然後再config/environment.rb中新增一行:

require 'try' if Rails.version =~ /^2\.2/

這代表著如果不是2.2的版本就不要引入,當然如果你是其他版本的可以自己弄一下

然後,try.rb內寫:

class Object
  def try(method)
    return send(method) if respond_to?(method)
  end
end

存檔後重新啟動你的Rails Server即可

使用方式可參考:http://www.javaeye.com/topic/169001

這種方法有一些缺陷,所以你可以去看看要怎樣處理

 

再來說說Model.to_json吧

Rails可以用.to_json將你的資料轉成JSON輸出,不過你會發現為什麼產生的格式會有點不一樣:

Factory.all.to_json #=> [{"factory": {:.....}]

到底要怎樣才能把Model Name給隱藏呢?其實只要在你的Model內加上一段程式碼就好:

class Factory < ActiveRecord::Base
  self.include_root_in_json = false
end

這樣就能關閉了~

而且,.to_json不只可以回傳attributes,也能回傳自己寫的methods哦:

Factory.all.to_json(:methods => [:href, :src]) #=> 這樣回傳的JSON就會有{"href": '...', "src": '...'}了

如果說,不想要回傳任何一個attributes只想回傳methods該怎樣做呢?

Factory.all.to_json(:only => [], :methods => :href) #=> 傳空的陣列給:only就OK啦!

 

Person.new("CFC").say("Happy Valentines Day").to("You")
#=> CFC said Happy Valentines Day to You

Rails Fun~

下次再見啦XD

 

arrow
arrow
    全站熱搜

    hechian 發表在 痞客邦 留言(2) 人氣()