![](/img/trans.png)
[英]How do I set the HTML options for collection_select in Rails?
[英]How to display options in collection_select from controller rails
我有一个方案,选择一个designation
,根据该designation
将benefits
于下拉菜单。 我为此写了一个ajax调用。
HTML:
<label>Designations</label>
<%= f.association :designation, input_html: { id: 'designation_select'},label_html: { class: 'form-control-plaintext' } %>
<label>Benefits</label>
<%= f.collection_select :benefit_ids, Benefit.all,:id, :name, {}, { id: 'benefit_select',multiple: 'multiple', :class => 'form-control multiselect-all',:include_blank => "Select Benefit" } %>
AJAX通话:
<script type="text/javascript">
document.addEventListener("turbolinks:load", function() {
$('#designation_select').change(function() {
debugger
id = $('#designation_select')[0].value;
$.ajax({
type: 'GET',
dataType: 'html',
data: {designation_id: id},
url: '/benefits/benefit_by_designation',
success: function(result) {
debugger
var el, length, options, parser, results, x;
$('#benefit_select').empty();
$('#benefit_select').prepend('<option value=\'\'> Select Benefit </option>');
parser = new DOMParser;
el = parser.parseFromString(result, 'text/html');
options = el.getElementsByTagName('option');
length = options.length;
x = 0;
results = [];
while (x < length) {
$('#designation_select')[0].appendChild(options[0]);
results.push(x++);
}
return results;
}
});
});
});
</script>
控制器中的方法:
def benefit_by_designation
benefits = Benefit.where('designation_id = ?', params[:designation_id])
render html: view_context.options_from_collection_for_select(benefits, :id, :name, {include_blank: 'Select Benefit'})
end
该代码运行得非常好, benefits = Benefit.where..
在控制器中运行了benefits = Benefit.where..
,但是render html:
无法正常工作。 如何在下拉菜单中显示该benefits
列表?
编辑:我意外地将ajax调用中的datatype
设置为json
但现在将其设置为html
。 现在,正在成功调用ajax的案例,但仍然没有结果显示。
尝试
def benefit_by_designation
benefits = Benefit.where('designation_id = ?', params[:designation_id])
render json: {:benefits => benefits }
end
将您的ajax成功更改为
success: function(result) {
var options='';
options += '<option value=\'\'> Select Benefit </option>';
if(result.benefits)
$.each(result.benefits,function(key, val){
options += '<option value="'+val['id']+'">'+val['name']+'</option>';
});
var option_set = $('#benefit_select').html(options);
option_set.trigger('change');
}
希望这会有所帮助..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.