0

我创建了一个带有多个 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 脚本也需要知道如何将其转换为字符串以显示真实数据。

知道如何在验证失败后实现数据仍写入字段吗?

4

1 回答 1

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 获取,但已填写的字段将在重定向到另一个操作时保留。

于 2017-09-27T16:22:57.563 回答