Railsの組み込み関数がいくつかあるので、すべての米国の州で選択ドロップダウンリストが作成されるので、手動で入力する必要はありません。オンラインで検索しましたが、何も見つかりませんでした。そのための提案は、手動ですべての州を入力する必要はありませんか?
いくつかのヘルパーファイル
def us_states
[
['Alabama', 'AL'],
['Alaska', 'AK'],
['Arizona', 'AZ'],
['Arkansas', 'AR'],
['California', 'CA'],
['Colorado', 'CO'],
['Connecticut', 'CT'],
['Delaware', 'DE'],
['District of Columbia', 'DC'],
['Florida', 'FL'],
['Georgia', 'GA'],
['Hawaii', 'HI'],
['Idaho', 'ID'],
['Illinois', 'IL'],
['Indiana', 'IN'],
['Iowa', 'IA'],
['Kansas', 'KS'],
['Kentucky', 'KY'],
['Louisiana', 'LA'],
['Maine', 'ME'],
['Maryland', 'MD'],
['Massachusetts', 'MA'],
['Michigan', 'MI'],
['Minnesota', 'MN'],
['Mississippi', 'MS'],
['Missouri', 'MO'],
['Montana', 'MT'],
['Nebraska', 'NE'],
['Nevada', 'NV'],
['New Hampshire', 'NH'],
['New Jersey', 'NJ'],
['New Mexico', 'NM'],
['New York', 'NY'],
['North Carolina', 'NC'],
['North Dakota', 'ND'],
['Ohio', 'OH'],
['Oklahoma', 'OK'],
['Oregon', 'OR'],
['Pennsylvania', 'PA'],
['Puerto Rico', 'PR'],
['Rhode Island', 'RI'],
['South Carolina', 'SC'],
['South Dakota', 'SD'],
['Tennessee', 'TN'],
['Texas', 'TX'],
['Utah', 'UT'],
['Vermont', 'VT'],
['Virginia', 'VA'],
['Washington', 'WA'],
['West Virginia', 'WV'],
['Wisconsin', 'WI'],
['Wyoming', 'WY']
]
end
何らかの形で
<%= select_tag :state, options_for_select(us_states) %>
Codeglotに感謝します。誰かがフルネームの代わりに2文字の州の略語を表示したい場合:
def us_states
[
['AK', 'AK'],
['AL', 'AL'],
['AR', 'AR'],
['AZ', 'AZ'],
['CA', 'CA'],
['CO', 'CO'],
['CT', 'CT'],
['DC', 'DC'],
['DE', 'DE'],
['FL', 'FL'],
['GA', 'GA'],
['HI', 'HI'],
['IA', 'IA'],
['ID', 'ID'],
['IL', 'IL'],
['IN', 'IN'],
['KS', 'KS'],
['KY', 'KY'],
['LA', 'LA'],
['MA', 'MA'],
['MD', 'MD'],
['ME', 'ME'],
['MI', 'MI'],
['MN', 'MN'],
['MO', 'MO'],
['MS', 'MS'],
['MT', 'MT'],
['NC', 'NC'],
['ND', 'ND'],
['NE', 'NE'],
['NH', 'NH'],
['NJ', 'NJ'],
['NM', 'NM'],
['NV', 'NV'],
['NY', 'NY'],
['OH', 'OH'],
['OK', 'OK'],
['OR', 'OR'],
['PA', 'PA'],
['RI', 'RI'],
['SC', 'SC'],
['SD', 'SD'],
['TN', 'TN'],
['TX', 'TX'],
['UT', 'UT'],
['VA', 'VA'],
['VT', 'VT'],
['WA', 'WA'],
['WI', 'WI'],
['WV', 'WV'],
['WY', 'WY']
]
end
これは、より詳細なウォークスルーです。 Rails 4:
ヘルパーフォルダーの下にstates_helper.rbを作成しました
States_helper.rb内:
module StatesHelper
def us_states
[
['Alabama', 'AL'],
['Alaska', 'AK'],
['Arizona', 'AZ'],
['Arkansas', 'AR'],
['California', 'CA'],
['Colorado', 'CO'],
['Connecticut', 'CT'],
['Delaware', 'DE'],
['District of Columbia', 'DC'],
['Florida', 'FL'],
['Georgia', 'GA'],
['Hawaii', 'HI'],
['Idaho', 'ID'],
['Illinois', 'IL'],
['Indiana', 'IN'],
['Iowa', 'IA'],
['Kansas', 'KS'],
['Kentucky', 'KY'],
['Louisiana', 'LA'],
['Maine', 'ME'],
['Maryland', 'MD'],
['Massachusetts', 'MA'],
['Michigan', 'MI'],
['Minnesota', 'MN'],
['Mississippi', 'MS'],
['Missouri', 'MO'],
['Montana', 'MT'],
['Nebraska', 'NE'],
['Nevada', 'NV'],
['New Hampshire', 'NH'],
['New Jersey', 'NJ'],
['New Mexico', 'NM'],
['New York', 'NY'],
['North Carolina', 'NC'],
['North Dakota', 'ND'],
['Ohio', 'OH'],
['Oklahoma', 'OK'],
['Oregon', 'OR'],
['Pennsylvania', 'PA'],
['Puerto Rico', 'PR'],
['Rhode Island', 'RI'],
['South Carolina', 'SC'],
['South Dakota', 'SD'],
['Tennessee', 'TN'],
['Texas', 'TX'],
['Utah', 'UT'],
['Vermont', 'VT'],
['Virginia', 'VA'],
['Washington', 'WA'],
['West Virginia', 'WV'],
['Wisconsin', 'WI'],
['Wyoming', 'WY']
]
end
end
Config-> environmentの下で、development.rbおよびproduction.rb内に以下を配置します
config.action_controller.include_all_helpers = true
最後に、ビュー内に配置します(これはSlim HTMLで入力されます)
= form_for :order_submissions, url: order_url, html: { id: "order_form"} do |f|
fieldset
.form-group
= f.select(:state, options_for_select(us_states, "CA"))
「CA」は、ロード時のドロップダウンメニューでカリフォルニアを事前選択します。
注:select_tag
は使用しませんでした。それを使用すると、select_tag
の未定義メソッドエラーが発生しました(select_tagはRubyガイドにありますが、どのように未定義にできますか?)select
だけを使用すると動作します。
このために、私は通常、カルメンとカルメン・レールの宝石を使用します。
https://github.com/jim/carmen-Rails
私のプロジェクトはまだRuby 1.8にあるので、特定のRuby-18ブランチを使用する必要があるため、Gemfileに次のものがあります。
gem 'carmen', :git => 'git://github.com/jim/carmen.git', :tag => 'Ruby-18'
gem 'carmen-Rails', :git => 'git://github.com/jim/carmen-Rails.git'
次に、:addressモデルオブジェクトの:state_codeフィールドを編集しているフォームで、すべての米国の州の選択タグを作成します...
subregion_select(:address, :state_code, Carmen::Country.coded('US'))
これをsimple_form
で動作させるために、私はこれを行いました。
これを私のuser.rb
モデルに追加しました:
STATES =
[
['Alabama', 'AL'],
['Alaska', 'AK'],
['Arizona', 'AZ'],
['Arkansas', 'AR'],
['California', 'CA'],
['Colorado', 'CO'],
['Connecticut', 'CT'],
['Delaware', 'DE'],
['District of Columbia', 'DC'],
['Florida', 'FL'],
['Georgia', 'GA'],
['Hawaii', 'HI'],
['Idaho', 'ID'],
['Illinois', 'IL'],
['Indiana', 'IN'],
['Iowa', 'IA'],
['Kansas', 'KS'],
['Kentucky', 'KY'],
['Louisiana', 'LA'],
['Maine', 'ME'],
['Maryland', 'MD'],
['Massachusetts', 'MA'],
['Michigan', 'MI'],
['Minnesota', 'MN'],
['Mississippi', 'MS'],
['Missouri', 'MO'],
['Montana', 'MT'],
['Nebraska', 'NE'],
['Nevada', 'NV'],
['New Hampshire', 'NH'],
['New Jersey', 'NJ'],
['New Mexico', 'NM'],
['New York', 'NY'],
['North Carolina', 'NC'],
['North Dakota', 'ND'],
['Ohio', 'OH'],
['Oklahoma', 'OK'],
['Oregon', 'OR'],
['Pennsylvania', 'PA'],
['Puerto Rico', 'PR'],
['Rhode Island', 'RI'],
['South Carolina', 'SC'],
['South Dakota', 'SD'],
['Tennessee', 'TN'],
['Texas', 'TX'],
['Utah', 'UT'],
['Vermont', 'VT'],
['Virginia', 'VA'],
['Washington', 'WA'],
['West Virginia', 'WV'],
['Wisconsin', 'WI'],
['Wyoming', 'WY']
]
私のビューのsimple_formにそれを使用させました:
<%= simple_form_for(@user) do |f| %>
<%= f.input :state, as: :select, collection: User::STATES %>
<%= f.button :submit %>
<% end %>
ヘルパーを使用して状態を封じ込めることで問題が見つかりました。新しいレコードを作成するときに完全に機能しますが、既存のレコードを編集する場合は、データベースの状態をドロップダウンボックスで事前に選択する必要があります。ヘルパーを使用してそれを動作させることができませんでした。ただし、単純な状態テーブルを作成すれば機能します。ここに私のために働いたものがあります:
State_codeおよびstate_name(またはそれらを呼び出すもの)の列のみを持つ状態モデルファイルとデータベーステーブルを生成します。 _Rails g model State state_code:string:uniq state_name:string --no-timestamps --no-test-framework
_。これにより、db/migrateフォルダーに移行ファイルが生成されます。 id列が必要ない場合は、_, id: false
_をcreate_tableブロック宣言に挿入して編集できます。
_# db/migrate/timestamp_create_states.rb
class CreateStates < ActiveRecord::Migration
def change
create_table :states, id: false do |t|
t.string :state_code, null: false
t.string :state_name
end
add_index :states, :state_code, unique: true
end
end
_
そして、データベース_rake db:migrate
_を移行します。
シードファイルを使用してテーブルを作成できます。重複を追加しないように、シードファイル内の以前にロードされたデータを削除またはコメント化してください。
_#db/seeds.rb
states = State.create!([
{ state_name: 'Alaska', state_code: 'AK' },
{ state_name: 'Alabama', state_code: 'AL' },
{ state_name: 'Arkansas', state_code: 'AR' },
{ state_name: 'Arizona', state_code: 'AZ' },
{ state_name: 'California', state_code: 'CA' },
{ state_name: 'Colorado', state_code: 'CO' },
{ state_name: 'Connecticut', state_code: 'CT' },
{ state_name: 'District of Columbia', state_code: 'DC' },
{ state_name: 'Delaware', state_code: 'DE' },
{ state_name: 'Florida', state_code: 'FL' },
{ state_name: 'Georgia', state_code: 'GA' },
{ state_name: 'Hawaii', state_code: 'HI' },
{ state_name: 'Iowa', state_code: 'IA' },
{ state_name: 'Idaho', state_code: 'ID' },
{ state_name: 'Illinois', state_code: 'IL' },
{ state_name: 'Indiana', state_code: 'IN' },
{ state_name: 'Kansas', state_code: 'KS' },
{ state_name: 'Kentucky', state_code: 'KY' },
{ state_name: 'Louisiana', state_code: 'LA' },
{ state_name: 'Massachusetts', state_code: 'MA' },
{ state_name: 'Maryland', state_code: 'MD' },
{ state_name: 'Maine', state_code: 'ME' },
{ state_name: 'Michigan', state_code: 'MI' },
{ state_name: 'Minnesota', state_code: 'MN' },
{ state_name: 'Missouri', state_code: 'MO' },
{ state_name: 'Mississippi', state_code: 'MS' },
{ state_name: 'Montana', state_code: 'MT' },
{ state_name: 'North Carolina', state_code: 'NC' },
{ state_name: 'North Dakota', state_code: 'ND' },
{ state_name: 'Nebraska', state_code: 'NE' },
{ state_name: 'New Hampshire', state_code: 'NH' },
{ state_name: 'New Jersey', state_code: 'NJ' },
{ state_name: 'New Mexico', state_code: 'NM' },
{ state_name: 'Nevada', state_code: 'NV' },
{ state_name: 'New York', state_code: 'NY' },
{ state_name: 'Ohio', state_code: 'OH' },
{ state_name: 'Oklahoma', state_code: 'OK' },
{ state_name: 'Oregon', state_code: 'OR' },
{ state_name: 'Pennsylvania', state_code: 'PA' },
{ state_name: 'Puerto Rico', state_code: 'PR' },
{ state_name: 'Rhode Island', state_code: 'RI' },
{ state_name: 'South Carolina', state_code: 'SC' },
{ state_name: 'South Dakota', state_code: 'SD' },
{ state_name: 'Tennessee', state_code: 'TN' },
{ state_name: 'Texas', state_code: 'TX' },
{ state_name: 'Utah', state_code: 'UT' },
{ state_name: 'Virginia', state_code: 'VA' },
{ state_name: 'Vermont', state_code: 'VT' },
{ state_name: 'Washington', state_code: 'WA' },
{ state_name: 'Wisconsin', state_code: 'WI' },
{ state_name: 'West Virginia', state_code: 'WV' },
{ state_name: 'Wyoming', state_code: 'WY' }
])
_
次に、rakeタスクを実行してdb _rake db:seed
_をシードします
フォームでこれを選択ボックスとして追加することができます(フィールド名としてstate_codeを使用していますが、それをstateまたは必要なものにすることができます):
_<%= f.label :state_code, 'State', class: 'control-label' %>
<%= f.collection_select(:state_code, State.select(:state_name, :state_code),
:state_code, :state_name, {selected: 'CA'}, {class: 'form-control'}) %>
_
Railsフォームブロックのcollection_selectヘルパーメソッドの形式はf.collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
です。ドロップダウンボックスのテキストと値の両方としてstate_codeが必要な場合は、:state_nameを:state_codeに変更します。最初の選択引数とtext_methodで(テキストと値の順序が逆になっていることに注意してください。)オプションで「CA」を事前選択しましたが、編集せずに新しいフォームに対してのみ行います(または毎回CAで値をオーバーライドします) )。これを空の_{include_blank: true}
_に変更するか、プロンプト_{Prompt: 'Select State'}
_を追加するか、空のハッシュ_{}
_で選択した値または最初の値にデフォルトを設定することができます。必要なフィールドは、それをhtmlオプションに追加できます_{class: 'form-control', required: true}
_
これで、フォームでステートテーブルからデータを入力でき、レコードの編集時に値が事前に選択されます。
あなたはあなたを助けることができる宝石を持っています: 国gemcountry_select 、状態入力の完全なソリューションがあります。
また、gemの依存関係リストを減らしたい場合は、次のようにします。
<%= f.select :country_code, ::ISO3166::Country.all_names_with_codes,{ include_blank: true } %>
これが機能しない場合:
<%= select_tag :state, us_states%>
これを試して :
<%=select_tag 'State', options_for_select(us_states),:name=>"state",:id=>"state"%>
これを確認してください https://rubygems.org/gems/country_state_select
Country State Selectは、フォームで使用するCountry、State/ProvinceおよびCityドロップダウンを生成する簡単なAPIを提供するライブラリです。
正しく実装されると、州/県のドロップダウンには、ユーザーが選択した国に基づいて適切な地域が表示されます。
たとえば、ユーザーが[国]ドロップダウンに[アメリカ合衆国]を選択した場合、[州]ドロップダウンには50の適切な州とコロンビア特別区が入力されます。
Rails 4.2.2 and Ruby 2.2.2 https: //rubyplus.com/articles/2501
組み込みの何かがあるかどうかはわかりませんRails HTMLの選択フィールドに米国の州が入力されるようにします。
しかし、これを説明するスクリーンキャストがあります: http://railscasts.com/episodes/88-dynamic-select-menus
役に立つことを願っています。