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

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

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

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

Ruby on Rails

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

Ajax

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

Q&A

解決済

1回答

1637閲覧

Rails ダイナミックセレクト

smith

総合スコア73

Ruby

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

Ruby on Rails

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

Ajax

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

0グッド

0クリップ

投稿2014/12/26 13:30

ajax通信で子カテゴリを変えたいのですが、うまくいきません
お助けください

lang

1 2 def list 3 selected_category = Category.where(parent_id: list_params) 4 childs = selected_category.childs.sort{|a, b| a.code <=> b.code} 5 data = [] 6 childs.each do |child| 7 data << {id: child.id, name: child.name}#child.code 8 end 9 respond_to do |format| 10 format.json { render json: data } 11 end 12 end 13 14 15 16 def list_params 17 params.require(:category_id) 18 end 19

lang

1$(document).on('change', '#category_select', function(evt) { 2 $.ajax({ 3 type: 'GET', 4 url: 'categoreis/list', 5 dataType: 'json', 6 data: { 7 parent_id: $("#category_select option:selected").val() 8 }, 9 error: function(jqXHR, textStatus, errorThrown) { 10 console.log("AJAX Error: " + textStatus); 11 }, 12 success: function(data, textStatus, jqXHR) { 13 $("#child_select").empty(); 14 if (data.length == 0) { 15 $("#child_select").hide(); 16 } else { 17 $("#child_select").show(); 18 } 19 $.each(data, function(idx, item) { 20 // console.log("" + item.code + ":" + item.name); 21 $("#child_select").append('<option value="' + item.code + '">' + item.name + '</option>'); 22 }); 23 console.log("Dynamic country select OK!"); 24 } 25 }); 26 }); 27 28

lang

1 2 <div class="form-group"> 3 <label for="categoryqid" class="col-sm-3 control-label">カテゴリ</label> 4 <div class="col-sm-9"> 5 6 <%= f.select :code, options_for_select(@categories.collect { |category| 7 [category.name, category.id] }), {:prompt => '選択してください' }, 8 { id: 'category_select', class: 'form-control select select-primary select-block mbl' } %> 9 10 11 <%= f.select :category_id, options_for_select(@childs.collect { |child| 12 [child.name, child.id] }), {:prompt => '選択してください' }, 13 { id: 'child_select' , class: 'form-control select select-primary select-block mbl'} %> 14 15 </div> 16 </div> 17

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

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

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

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

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

guest

回答1

0

自己解決

<div class="form-group"> <label for="category_id" class="col-sm-3 control-label">カテゴリ</label> <div class="col-sm-9"> <%= f.select :category_id, options_for_select(@categories.collect { |category| [category.name, category.id] }), {:prompt => '選択してください' }, { id: 'category_select', class: 'form-control select select-primary select-block mbl' } %> <br> <%= f.select :category_id, options_for_select(@childs.collect { |child| [child.name, child.id] }), {:prompt => '選択してください' }, { id: 'child_select' , class: 'form-control select select-primary select-block mbl'} %> </div> </div>

def list
selected_category = Category.where(parent_id: list_params)
data = []
selected_category.each do |child|
data << {id: child.id, name: child.name}#child.code
end
respond_to do |format|
format.json { render json: data }
end
end

def list_params
params.require(:category_id)
end

$(document).on('change', '#category_select', function(evt) {
$.ajax({
type: 'GET',
url: 'categoreis/list',
dataType: 'json',
data: {
category_id: $("#category_select option:selected").val()
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("AJAX Error: " + textStatus);
},
success: function(data, textStatus, jqXHR) {
$("#child_select").empty();
if (data.length == 0) {
$("#child_select").hide();
} else {
$("#child_select").show();
}
$.each(data, function(idx, item) {
// console.log("" + item.code + ":" + item.name);
$("#child_select").append('<option value="' + item.code + '">' + item.name + '</option>');
});
console.log("Dynamic country select OK!");
}
});
});

投稿2014/12/26 15:56

smith

総合スコア73

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問