我有一個Rails應用程序,它有一個COUNTRIES
列表,其中包含在Company
模型中創建的完整國家和縮寫。 COUNTRIES
列表的數組用於輸入表單上的選擇標記,以在數據庫中存儲縮寫。見下文。 VALID_COUNTRIES
用於DB中縮寫的驗證。 FULL_COUNTRIES
用於顯示縮寫的完整國家名稱。我可以避免在Ruby on Rails中轉換數組嗎?
class Company < ActiveRecord::Base
COUNTRIES = [["Afghanistan","AF"],["Aland Islands","AX"],["Albania","AL"],...]
COUNTRIES_TRANSFORM = COUNTRIES.transpose
VALID_COUNTRIES = COUNTRIES_TRANSPOSE[1]
FULL_COUNTRIES = COUNTRIES_TRANSPOSE[0]
validates :country, inclusion: { in: VALID_COUNTRIES, message: "enter a valid country" }
...
end
在形式:
<%= select_tag(:country, options_for_select(Company::COUNTRIES, 'US')) %>
而且轉換回完整的國名:
full_country = FULL_COUNTRIES[VALID_COUNTRIES.index(:country)]
這似乎是一個散列一個優秀的應用,除了鍵/值訂單是錯誤的。對於選擇,我需要:
COUNTRIES = {"Afghanistan" => "AF", "Aland Islands" => "AX", "Albania" => "AL",...}
雖然從DB採取的縮寫,顯示完整的國名,我需要:
COUNTRIES = {"AF" => "Afghanistan", "AX" => "Aland Islands", "AL" => "Albania",...}
這是一種恥辱,因爲COUNTRIES.keys
或COUNTRIES.values
會給我驗證列表(取決於使用哪個哈希佈局)。
我對Ruby/Rails比較陌生,正在尋找更類似於Ruby的方式來解決這個問題。以下是問題:
- 轉置是否只發生一次,如果是,它何時執行?
- 有沒有辦法指定不需要轉置的FULL_和VALID_列表?
- 有沒有更好的或合理的替代方法來做到這一點?例如,VALID_COUNTRIES是COUNTRIES [x] [1],FULL_COUNTRIES是COUNTRIES [x] [0],但VALID_必須與驗證配合使用。
- 有沒有辦法使用一個散列而不是一個散列來處理
select_tag
,另一個用於將數據庫中的縮寫轉換爲全名以顯示?
什麼是 雖然顯示完整的國家名稱我需要: 'COUNTRIES = {「AF」=>「阿富汗」,「AX」=>「奧蘭羣島」,「AL」=>「阿爾巴尼亞」。 ..' 表示? – austinbv
請參閱上面的修改。數據庫中的國家縮寫需要轉換回完整的國家名稱才能顯示。 –