は、私は別の選択ボックス<%= f.select :form_fields %>
を持ってレール4の選択ボックスを自動入力する方法は?私のフォームで
<%= f.select :form_name, get_form_names, { }, { class: 'selectpicker', required: true } %>
のような選択ボックスを持っています。
ユーザーがform_name
を選択したときに、フォームの名前に基づいてform_fields
選択ボックスのオプションを設定したいとします。
私はform_fields
def get_form_fields
@fields = (params[:form_is].constantize).column_names
respond_to do |format|
format.js
end
end
と私のroutes.rb
get 'export_from_form/get_form_fields'
resources: export_from_forms
中を得るために、私のコントローラの新しい方法を書いて、私は
$(function(){
$("#export_from_form_form_name").on('change', function(){
var form_name = $("#export_from_form_form_name:selected").val();
$.ajax({
url: "get_form_fields",
type: 'GET',
dataType: 'script',
data: { form_is: form_name},
error: function(jqXHR, textStatus, errorThrown){
console.log("AJAX Error: " + errorThrown);
},
success: function(data, textStatus, jqXHR){
console.log('Dynamic column slect OK! ' + data);
}
});
});
});
フォームフィールドのデータを取得するには、次のJSを試してみました編集
今、私はjsonでエンコードされた配列としてform_fieldsの配列を取得できます。しかし、関係なく、私は
<%= f.select :form_fields,[], { prompt: "Select Column names" }, { :multiple => true, class: 'selectpicker', required: true } %>
これは私のjsであるためのオプションとして、この配列を追加することはできませんしてみてください何の:
$(function(){
$("#export_from_form_form_name").on('change', function(){
var name =$("#export_from_form_form_name").val();
$.ajax({
url: "get_columns",
type: 'GET',
dataType: 'json',
data: { form_is: name},
error: function(jqXHR, textStatus, errorThrown){ console.log("AJAX Error: " + errorThrown); },
success: function(data, textStatus, jqXHR){
console.log(data);
change_select(data);
}
});
});
});
function change_select(data) {
$("#export_from_form_form_fields").empty();//remove all previous majors
var length = data.length;
for(i = 0;i<length;i++){
$("#export_from_form_form_fields").append(//add in an option for each major
$("<option></option>").attr("value", data[i]).text(data[i])
);
}
}
2番目の選択ボックスへの入力方法に関する追加情報を提供できますか。たぶんあなたのフォームコード全体を投稿しますか? –
これを行うにはプレーンなjavascriptを使うかもしれません...または誰かがフォーム名を選択するたびにリクエストを送信したいですか? – mahatmanich
@TonyVincentこれにはJSを使う必要があります。 –