2011-11-08 95 views
1

我找不到這個的一個很好的例子,所以請給我指出正確的方向。在導軌上創建新對象

我要從頭開始創建一個對象有兩個屬性縮寫和名稱

我試圖與50個州和華盛頓特區的對象。由於我沒有看到這個列表經常發生變化,所以我沒有看到需要數據庫,也許我錯了。

我曾嘗試沒有成功如下:

new_state = Object.new   
new_state.abbr = state[:abbr]  
new_state.name = state[:name] 

,我得到undefined method abbr=' for #<Object:0x00000006763008>

我在做什麼錯?

class State 
    attr_accessor :abbr, :name 
end 

new_state = State.new 
new_state.abbr = state[:abbr] 
new_state.name = state[:name] 

您的版本不因爲Object工作沒有abbr=name=方法,它不會讓他們上來就飛:

回答

2

你可以使用decoder在YAML中讀取/保存其狀態/縮寫/ i18n。

Decoder.i18n = :en 
country = Decoder::Countries[:US] 
country.to_s 
# => "United States"  

state = country[:MA] 
state.to_s 
# => "Massachusetts" 
+1

這真是太棒了,現在有沒有車型和車型? haha –

+0

有一個[嘗試](http://tektastic.com/2008/03/car-or-auto-make-model-year-database.html)使用KBB APIs – tolitius

2

你可以沒有它背後的數據庫中創建一個簡單的類。

+0

一如既往,您的評論真棒。我只是認爲另一種方式對我來說會是一個更好的解決方案。 –

2

Ruby中的對象與JavaScript中的對象非常不同,我假設您已經習慣了,因此添加屬性並不是那麼簡單。哈希,反而是非常類似於JS關聯數組,你可以用它爲您的目的:

states = Hash.new # or just {} 
states[state[:abbr]] = state[:name] # {'MD' => 'Maryland'} 
states['AL'] = 'Alaska' # {'MD' => 'Maryland', 'AL' => 'Alaska'} 
states.keys # => ['MD', 'AL'] 
states.values # => ['Maryland', 'Alaska'] 
states['AL'] # => 'Alaska' 

正如你所看到的,哈希提供添加,查找和獲取開箱即用,所以你不」你甚至可以定義你自己的班級。 將內容添加到內容後,將內容凍結也是一個不錯的主意。