前提・実現したいこと
rails4でajaxを使用した連動プルダウンの実装を試みているのですが、理想形が3階層のプルダウン(例として、都道府県[Prefecture]→市区町村「City」→郵便番号[Number])での記述の仕方がわかりません。
発生している問題・エラーメッセージ
色々ググってみた結果様々なアプローチがあるようですが、現状下記のコードで2階層までの連動プルダウンが実現できており、あと一息で3階層ができそうなのですが、2階層目を選択した時点で3階層目が"3階層目が表示されるよ!"部分に表示されずそのままで、反応していないようです。特別エラーを吐いている様子はないのですが、パラメータ[params[:number_id]]が3階層目に飛んでいない(ajax処理ができていない?)ことは確認済みです。
尚、参考サイト(2階層まではこちらを参考)のソースをそのまま模写している部分があるため、不自然な点があるかもしれません。
下記ソースの内容や別アプローチを含め、このような場合のベストプラクティスをご教授いただけますと幸いです。よろしくお願いします。
ソースコード
#ajax_controller.rb
class AjaxController < ApplicationController
def search
@prefectures=Prefecture.select(:prefecture_name,:id,:city_id).distinct
end
def result
@cities=City.where(prefecture_id:params[:city_id])
end
def result2
@numbers=Number.where(city_id:params[:number_id])
end
end
#search.html.erb
<%= select_tag(:city_id, options_from_collection_for_select(@prefectures, :city_id, :prefecture_name),:id=>'pub',:prompt => "都道府県を選択してください",
data:{
remote:true,
url:url_for(action: :result)
}
)%>
<span id="result">
"2階層目が表示されるよ!"
</span>
<span id="result2">
"3階層目が表示されるよ!"
</span>
//result.js.erb
//2階層目のjs
$(function(){
$('#result').html("<%= escape_javascript(render 'search_result') %>");
$('#pub').change(function(){
})
});
#_search_result.html.erb
#2階層目の部分テンプレート
<%= select_tag(:number_id,options_from_collection_for_select(@cities,:number_id,:city_name),:id=>'pub',
data:{
remote:true,
url:url_for(action: :result2)
}
)
%>
//result2.js.erb
//3階層目のjs
$(function(){
$('#result2').html("<%= escape_javascript(render 'search_result2') %>");
$('#pub').change(function(){
})
});
#_search_result2.html.erb
#3階層目の部分テンプレート
<%= select_tag(:id,options_from_collection_for_select(@numbers,:id,:number),:id=>'pub')%>
#routes.rb
get 'ajax/search'
get 'ajax/result'
post '/ajax/result'
get 'ajax/result2'
post '/ajax/result2'
補足情報(言語/FW/ツール等のバージョンなど)
ruby 2.1.3
Rails 4.2.5
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる