2017-09-20 14 views
0

複数のselect要素とcollection_select要素を持つrails(v5)フォームを作成しました。 次に、Select2-rails(v4.0.3)を使用して、タグのような素晴らしい選択を可能にします。 検索オプションはajaxによって引き出されます。Select2 rails form retopulation

必須フィールドのない送信ボタンを押すまでは問題ありません。 有効なフィールドコンテンツがフィールドから削除されました。

私はいくつかのサンプルコードを挙げてみましょう:

コントローラ:

... 

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 %> 

:フィールドがモデルに必ず書き込み可能なフィールドのためである(データが設定されていますファイン)

coffee-script:

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

いくつかのことを試した後、私はそれを行う方法を見つけました。 最初は空の配列を: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によって引き続き取り出されますが、すでに入力されたフィールドは別のアクションにリダイレクトされた後も保持されます。