2017-06-16 6 views
0

質問が十分に明確でない場合は、たとえばIDを持つデータベースの状態を保存しています。私はその身分証明書を返すことができますが、私はカリフォルニア州のような州名に変換するのが難しいです。テキスト文字列と一致する必要があるIDを持つデータベースからデータを取得するときに、データベースIDを照合するにはどうすればよいですか?

初期フォームコード:しかし、私は代わりに、それは「カリフォルニア」を表示する必要が

<%= current_user.user_state %> 

<%= f.select :user_state, options_for_select(states, f.object.user_state), {}, { :class => 'form-control' } %> 

カリフォルニアは保存され、出力が正しく次のコードを使用しているID 5であります「5」の

UPDATE: モデルはこれを使って何を持っていない...ユーザーのために

スキーマ:

create_table "users", force: :cascade do |t| 
t.string "email",     default: "", null: false 
t.string "encrypted_password",  default: "", null: false 
t.string "reset_password_token" 
t.datetime "reset_password_sent_at" 
t.datetime "remember_created_at" 
t.integer "sign_in_count",   default: 0,  null: false 
t.datetime "current_sign_in_at" 
t.datetime "last_sign_in_at" 
t.string "current_sign_in_ip" 
t.string "last_sign_in_ip" 
t.datetime "created_at",        null: false 
t.datetime "updated_at",        null: false 
t.boolean "agreement_termspp",  default: false 
t.string "full_name" 
t.string "phone_number" 
t.text  "extra_details" 
t.string "user_address" 
t.string "user_city" 
t.string "user_state" 
t.string "user_zipcode" 
t.index ["email"], name: "index_users_on_email", unique: true, using: :btree 
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree 
end 


UPDATE 2:私は、次のとusers_helper.rbのファイルを持っている:

module UsersHelper 
    def states 
     [ 
      ["Select A State", "na1"], 
     ["----", "na2"], 
     ["Alabama", "1"], 
     ["Alaska", "2"], 
     ["Arizona", "3"], 
     ["Arkansas", "4"], 
     ["California", "5"], 
     ["Colorado", "6"], 
     ["Connecticut", "7"], 
     ["Delaware", "8"], 
     ["District Of Columbia", "9"], 
     ["Florida", "10"], 
     ["Georgia", "11"], 
     ["Hawaii", "12"], 
     ["Idaho", "13"], 
     ["Illinois", "14"], 
     ["Indiana", "15"], 
     ["Iowa", "16"], 
     ["Kansas", "17"], 
     ["Kentucky", "18"], 
     ["Louisiana", "19"], 
     ["Maine", "20"], 
     ["Maryland", "21"], 
     ["Massachusetts", "22"], 
     ["Michigan", "23"], 
     ["Minnesota", "24"], 
     ["Mississippi", "25"], 
     ["Missouri", "26"], 
     ["Montana", "27"], 
     ["Nebraska", "28"], 
     ["Nevada", "29"], 
     ["New Hampshire", "30"], 
     ["New Jersey", "31"], 
     ["New Mexico", "32"], 
     ["New York", "33"], 
     ["North Carolina", "34"], 
     ["North Dakota", "35"], 
     ["Ohio", "36"], 
     ["Oklahoma", "37"], 
     ["Oregon", "38"], 
     ["Pennsylvania", "39"], 
     ["Rhode Island", "40"], 
     ["South Carolina", "41"], 
     ["South Dakota", "42"], 
     ["Tennessee", "43"], 
     ["Texas", "44"], 
     ["Utah", "45"], 
     ["Vermont", "46"], 
     ["Virginia", "47"], 
     ["Washington", "48"], 
     ["West Virginia", "49"], 
     ["Wisconsin", "50"], 
     ["Wyoming", "51"], 
     ["---- ", "na3"], 
     ["American Samoa", "100"], 
     ["Guam", "101"], 
     ["Northern Mariana Islands", "102"], 
     ["Puerto Rico", "103"], 
     ["United States Minor Outlying Islands", "104"], 
     ["Virgin Islands", "105"] 
    ] 
end 
+0

モデルとスキーマを投稿する – Pavan

+0

'country'または' states'テーブルをypuに作成すると、 'california'のためにどのように5を得ますか? –

+0

私はヘルパーエリアを持っています...上記の更新を投稿します... – code4fun

答えて

1

user.rbには、メソッド

を定義できます
def user_state_name 
    State.find_by_id(user_state).try(:name) 
end 

あなたは

current_user.user_state_name 

UPDATEとしてそれを呼び出すことができます

ハッシュに変換し、IDの状態の名前を返すために、あなたのヘルパーで別のメソッドを定義

def state_name(id) 
    states.to_h.invert[id.to_s] 
end 

あなたの意見では、

彼らは定数であるので、小さな提案はしかし、彼らはなりましょう
state_name(current_user.user_state) 

..

STATES = [ #whole state array 
    ].freeze 

STATES_HASH = STATES.to_h.invert.freeze 

def states 
    STATES 
end 

def state_name(id) 
    STATES_HASH[id.to_s] 
end 
+0

# "ユーザ:0x007fd808b5de88>のための"未定義のメソッド 'state_name 'を取得しています" – code4fun

+0

'states'はdbエントリか静的データですか? –

+0

私のヘルパーファイルの静的データ... – code4fun

1

あなたの状態にしたい状態の位置を見つけるヘルパー配列のように:

idx = states.index { |state| state.second == current_user.user_state } 

と次にそれをつかみます

states[idx] 

のように1行に入れることができます

states[states.index { |state| state.second == current_user.user_state }] 
関連する問題