我创建了一个带有多个select和collection_select元素的rails(v5)表单。 然后我使用Select2-rails(v4.0.3)来做一个看起来像标签的好选择。 搜索选项由ajax提取。
它可以正常工作,直到按下提交按钮并缺少必填字段。 现在已从字段中删除了有效的字段内容。
让我举一些示例代码:
控制器:
...
def form
if params[:form_request].nil?
@form_request = FormRequest.new
else
@form_request = FormRequest.new(params[:form_request])
end
end
def request_form
@form_request = FormRequest.new(params[:form_request])
if @form_request.valid?
render :summary
else
render :form
end
end
...
形式:
...
<%= bootstrap_form_for(@form_request, url: '/form/request_form') do |f| %>
<%= f.select :field, [], {label: 'Field label'} %>
<%= f.submit "Submit form" %>
<% end %>
:field肯定是模型中的可写字段(并且数据设置正常)
咖啡脚本:
Query ->
$("#form_request_from").select2({
ajax: {
url: func =(params) ->
filter = params.term
return "/data.json?filter=" + filter;
,
dataType: 'json',
processResults: processData
},
theme: 'bootstrap',
placeholder: 'Enter data here'
});
processData = (data) ->
mapdata = $.map(data, func =(obj) ->
obj.id = obj.id;
obj.text = obj.name;
return obj;
);
return { results: mapdata };
我正在考虑很多可能性,但最后我不确定现场数据的来源。它位于对象内部,但不以任何方式写入生成的HTML。 即使id被写为选定的选项, select2脚本需要知道如何将其转换为字符串以显示真实数据。
知道如何在验证失败后仍然将数据写入字段吗?
答案 0 :(得分:0)
在尝试了一些事情后,我发现了如何做到这一点。 起初我只是将空数组更改为:field变量。 这不能很好地工作,因为它只记住之前输入的值的ID,因此SELECT2脚本无法找到该键的值,也没有显示任何内容。
然后我在控制器中创建了一个新变量,我在其中放置了名称和id:
的数组field_object = ObjectsModel.find(@form_request.field.to_i)
@form_field = []
if !field_object.nil?
@form_field = [[field_object.name, field_object.id]]
end
在视图中我现在使用此字段显示可用选项:
<%= bootstrap_form_for(@form_request, url: '/form/request_form') do |f| %>
<%= f.select :field, @form_field, {label: 'Field label'} %>
<%= f.submit "Submit form" %>
<% end %>
这对我来说非常好,无需触摸SELECT2脚本。 AJAX仍然可以获取可能的值,但已经填写的字段将在重定向到另一个操作时保留。