モデルCOUNTRIES
内に作成された完全な国名と略語のリストを持つRailsアプリがあります。Company
リストの配列はCOUNTRIES
、入力フォームの select タグに使用され、略語を DB に格納します。下記参照。VALID_COUNTRIES
DB の略語の検証に使用されます。FULL_COUNTRIES
略語から完全な国名を表示するために使用されます。
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
orは検証リストを提供するため、これは残念COUNTRIES.values
です(使用されるハッシュレイアウトによって異なります)。
私はRuby/Railsに比較的慣れていないので、問題を解決するためのRubyのような方法を探しています。質問は次のとおりです。
- 転置は 1 回だけ行われますか? その場合、いつ実行されますか?
- 転置を必要としない FULL_ および VALID_ リストを指定する方法はありますか?
- これを行うためのより良い、または合理的な代替方法はありますか? たとえば、VALID_COUNTRIES は COUNTRIES[x][1] で、FULL_COUNTRIES は COUNTRIES[x][0] ですが、VALID_ は検証で機能する必要があります。
select_tag
DB 内の略語を完全な名前に変換して表示するためのハッシュではなく、1 つのハッシュだけでハッシュを機能させる方法はありますか?