簡體   English   中英

Select2 Rails表格重新填充

[英]Select2 rails form repopulation

我創建了帶有多個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腳本也需要知道如何將其轉換為字符串以顯示真實數據。

知道如何通過失敗的驗證將數據仍然寫入字段嗎?

在嘗試了一些事情之后,我發現了如何做。 起初,我也只是將空數組更改為: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提取,但已經填寫的字段將在重定向到另一個操作時保留。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM