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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1816閲覧

住所を自動入力すると保存ができなくなります。

Rena0522

総合スコア7

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2018/04/24 10:12

Railsで住所自動入力フォームを実装したいです。

ajaxという郵便番号を入力すると住所が自動入力されるライブラリを用いて、郵便番号を入力するとそれに該当する住所が出るようなフォーマットを作ることはできました。しかし、いざそのデータを保存しようとすると、param is missing or the value is empty: listingというエラーが出ます。原因が分からず困っています。

発生している問題・エラーメッセージ

param is missing or the value is empty: listing

該当のソースコード

Ruby

1address.html.erb 2 3<%= render 'partial/navbar' %> 4<div class="container"> 5 <div class="col-md-3"> 6 <!-- vertical-navbar --> 7 <%= render 'partial/verticalnavbar'%> 8 </div> 9 <div class="col-md-9"> 10 <div class="panel panel-default"> 11 <div class="panel-heading"> 12 <div class="text-center"> 13 <span style="font-size:24px;">住所の編集</span> 14 </div> 15 </div> 16 17 <div class="panel-body"> 18 19 <%= form_for @listing do |f| %> 20 21 <div class="row"> 22 <div class="col-md-12"> 23 <div class="form-group"> 24 <label></label> 25 <script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script> 26 <!-- ▼郵便番号入力フィールド(7) --> 27 <input type="text" name="zip11" size="10" maxlength="8" onKeyUp="AjaxZip3.zip2addr(this,'','addr11','addr11');"> 28 </div> 29 </div> 30 </div> 31 <div class="row"> 32 <div class="col-md-12"> 33 <div class="form-group"> 34 <label>住所</label> 35 <!-- ▼住所入力フィールド(都道府県+以降の住所) --> 36 <%= f.text_field :address, placeholder: "例: 東京都港区六本木6丁目11−1", class: "form-control", required: "true" , name:"addr11" %> 37 </div> 38 </div> 39 </div> 40 41 <div class="actions"> 42 <%= f.submit "更新", class: "btn btn-danger" %> 43 </div> 44 <% end %> 45 </div> 46 </div> 47 </div> 48</div> 49 50 51listing_controller.rb 52 53エラー該当箇所↓ 54private 55 def listing_params 56 params.require(:listing).permit(:home_type, :pet_type, :breeding_years, :pet_size, :price_pernight, :address, :listing_title, :listing_content, :active) 57 end 58 59元の部分↓ 60def update 61 62 @listing.update(listing_params) 63 redirect_back fallback_location: root_path,notice:"更新できました" 64 end 65

試したこと

,name: "addr11"の部分を消すとエラーは発生しないのですが、当然郵便番号に紐づく住所は表示されなくなります。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

m.ts10806

2018/04/24 21:17

エラーメッセージで検索するとteratail内の過去質問がでてきますが、そちらは確認されました?現象とやってみたことは近いように思います。 https://teratail.com/questions/30703
Rena0522

2018/04/25 00:02

ご回答して頂きありがとうございます!はい、参考にしましたが、やはり自動入力された場合は保存ができなくなります。本来addressとして保存されるべきデータがaddr11で保存されてしまっているようなのですが... よくわからないですね。
guest

回答1

0

自己解決

もう一個隠れたformを作成し、JSを使って無理やり表面に出ている値をDBのカラムに送信するようにしたらエラーは出ず、無事保存できるようになりました。
以下、コードを貼っておきます。
コメントして下さった方、考えて頂いた方々、本当にありがとうございました。

address.html.erb

<%= render 'partial/navbar' %>

<div class="container"> <div class="col-md-3"> <!-- vertical-navbar --> <%= render 'partial/verticalnavbar'%> </div> <div class="col-md-9"> <div class="panel panel-default"> <div class="panel-heading"> <div class="text-center"> <span style="font-size:24px;">住所の編集</span> </div> </div>
<div class="panel-body"> <%= form_for @listing do |f| %> <div class="row"> <div class="col-md-12"> <div class="form-group"> <label>〒 郵便番号から住所を検索 (保存はされません)</label> <script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script> <!-- ▼郵便番号入力フィールド(7桁) --> <input f.text_field :preadd, placeholder= "例: 1234567", class="form-control", name="zip11" size="10" maxlength="8" onKeyUp="AjaxZip3.zip2addr(this,'','addr11','addr11');"> <%= f.hidden_field :address %> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="form-group"> <label>住所</label> <!-- ▼住所入力フィールド(都道府県+以降の住所) --> <%= f.text_field :address, placeholder: "例: 東京都港区六本木6丁目11−1", class: "form-control", required: "true" , name:"addr11", id: "preadd" %> <!--上矢印 これ追加 , name:"addr11" してね--> </div> </div> </div> <div class="actions"> <%= f.submit "更新", class: "btn btn-success", onClick: 'setAddress()' %> </div> <% end %> </div> </div>
</div> </div> <script> function setAddress() { var preadd = document.getElementById("preadd").value; document.getElementById('listing_address').value = preadd; } </script>

投稿2018/04/26 09:27

Rena0522

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問