質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1487閲覧

Railsでフォーム入力された値を送信される前に取得したいのですが、教えていただけないでしょうか?

koume

総合スコア458

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/11/08 01:09

Rails5.1.3でWebアプリケーション制作の勉強をしています。
「登録」ボタンをクリックすると入力フォームの値が保存されるように普通にフォームを作成しています。
そこで住所の入力のところで、都道府県の部分はドロップダウンリストにて選択出来るようにしています。
次に市区町村の部分もドロップダウンリストで選択出来るようにしたいのです。
たとえば、都道府県の選択で「秋田県」を選択したら秋田県の市区町村のドロップダウンリストに切り替わり、「山形県」を選択すると山形県の市区町村のドロップダウンリストに切り替えるという具合です。

フォームに入力中の「都道府県」の値を取得しそれに対応するドロップダウンに切り替える方法を
どなたか教えていただけないでしょうか?宜しくお願いします。
現在のコードは以下のようになっています。

customers_controller.rb class Visitor::CustomersController < Visitor::Base def new @customer_form = Visitor::CustomerForm.new end def create @customer_form = Visitor::CustomerForm.new @customer_form.assign_attributes(params[:form]) if @customer_form.save flash.notice = 'お客様アカウントを新規登録しました。' redirect_to :new_visitor_history else flash.now.alert = '入力に誤りがあります。' render action: 'new' end end
new.html.erb <% @title = '顧客の新規購入登録' %> <h1><%= @title %></h1> <div id="generic-form"> <%= form_for @customer_form, as: 'form', url: :visitor_customer do |f| %> <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '注文画面へ' %> <%= link_to 'キャンセル', :customer_root %> </div> <% end %> </div>
_form.html.erb <%= FormPresenter.new(f, self).notes %> <fieldset id="customer-fields"> <legend>基本情報登録</legend> <%= render 'customer_fields', f: f %> </fieldset> <div> <%= f.check_box :inputs_address %> <%= f.label :inputs_address %> </div> <fieldset id="address-fields"> <legend>自宅住所登録</legend> <%= render 'address_fields', f: f %> </fieldset>
_address_fields.html.erb <%= f.fields_for :address, f.object.customer.address do |ff| %> <%= markup do |m| p = AddressFormPresenter.new(ff, self) p.with_options(required: true) do |q| m << q.postal_code_block(:postal_code, '郵便番号', size: 7) m << q.drop_down_list_block(:prefecture, '都道府県', Address::PREFECTURE_NAMES) m << q.drop_down_list_block(:city, '市区町村', Address::AKITA_CITY) m << q.drop_down_list_block(:city, '市区町村', Address::YAMAGATA_CITY) m << q.text_field_block(:address1, '町域、番地等', size: 40) end m << p.text_field_block(:address2, '建物名、部屋番号等', size: 40) end %> <% end %>
address.rb class Address < ActiveRecord::Base include StringNormalizer belongs_to :customer #has_many :phones, -> { order(:id) }, dependent: :destroy, autosave: true before_validation do self.postal_code = normalize_as_postal_code(postal_code) self.city = normalize_as_name(city) self.address1 = normalize_as_name(address1) self.address2 = normalize_as_name(address2) end PREFECTURE_NAMES = %w( 都道府県を選択 北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 鳥取県 島根県 岡山県 広島県 山口県 徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県 ) AKITA_CITY = %w( 都道府県を選択 にかほ市 由利本荘市 ) YAMAGATA_CITY = %w( 都道府県を選択 酒田市 鶴岡市 ) validates :postal_code, format: { with: /\A\d{7}\z/, allow_blank: true } validates :prefecture, inclusion: { in: PREFECTURE_NAMES, allow_blank: true } validates :city, inclusion: { in: AKITA_CITY, allow_blank: true } validates :city, inclusion: { in: YAMAGATA_CITY, allow_blank: true } validates :postal_code, :prefecture, :city, :address1, presence: true end

_address_fields.html.erbの
m << q.drop_down_list_block(:city, '市区町村', Address::AKITA_CITY)
m << q.drop_down_list_block(:city, '市区町村', Address::YAMAGATA_CITY)
の部分をフォームの都道府県の入力値を取得し切り替えたいのです。

宜しくお願いいたします。
参考になるサイトなども教えていただければ助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

JavaScriptで解決できそうなのですが取得したデータをコントローラーで扱う方法がわからないので別途質問します。

投稿2018/11/08 04:59

koume

総合スコア458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問