JQuery Multiselect не сохраняет правильную последовательность при отправке в Rails

0

Я использую JQuery Multiselect (http://loudev.com/) в форме в Rails. Все работает отлично, но порядок, в котором данные выбраны из мультиселектора, не сохраняется.

Я в основном имею ту же проблему, что и здесь: jquery multiselect выбранный порядок данных

Мне нужно реализовать аналогичное решение в Rails, и любая помощь будет высоко оценена

Вот код

ФОРМА (мультиселекция происходит в коллекции_выбор)

:javascript
  $(document).ready(function (){
       $('#load_format_column_sequence').multiSelect({ keepOrder: true });
  });

= form_for [:operate,@biller,@load_format], :remote => true do |form| 
  = form.fieldset :legend => 'General' do
    = form.text :name
    = form.text :load_processor
    = form.text :processor_options
    = form.fields_for(@load_format) do |builder|
      = builder.label "Column Sequence"
      = collection_select(:load_format, :column_sequence, load_format_column_sequence_select, :last, :first,  {}, {:multiple => true})
    = form.checkbox :inactivate_removed_accounts
  = form.fieldset :legend => 'Schedule and Transfer' do
    - @load_format.build_file_transfer_format unless @load_format.file_transfer_format
    = render :partial => 'operate/file_transfer_formats/form', :locals => { :form => form, :file_transfer_format => @load_format.file_transfer_format, :parent => @load_format, :show_schedule => true  }

Массив данных

def load_format_column_sequence_select
    {
      'EXTERNAL KEY' => :external_key,
      'EXTERNAL CODE' => :external_code,
      'ACCOUNT TYPE' => :account_type,
      'PAYER NAME' => :payer_name,
      'ALTERNATE PAYER NAME' => :payer_alternate_name,
      'PAYMENT AMOUNT' => :payment_amount,
      'PAYOFF AMOUNT' => :payoff_amount,
      'ACTIVE' => :active,
      'ALTERNATE KEYS' => :alternate_keys,
      'BILL EXTERNAL KEY' => :bill_external_key,
      'BILL EXTERNAL CODE' => :bill_external_code,
      'BILL DUE AMOUNT' => :bill_due_amount,
      'BILL DISCOUNT AMOUNT' => :bill_discount_amount,
      'BILL ALTERNATE KEY' => :bill_alternate_key,
      'DETAIL EXTERNAL KEY' => :detail_external_key,
      'DETAIL AMOUNT' => :detail_amount,
      'DETAIL DESCRIPTION' => :detail_description,
      'GROUP NAME' => :group_name,
      'GROUP EXTERNAL KEY' => :group_external_key,
      'RECENT CHECK ABA' => :recent_check_aba,
      'RECENT CHECK ACCOUNT' => :recent_check_account,
      'RECENT CHECK NUMBER' => :recent_check_num,
      'RECENT CHECK AMOUNT' => :recent_check_amount,
      'PAYER FIRST NAME' => :payer_first_name,
      'PAYER LAST NAME' => :payer_last_name,
      'ACCOUNT DESCRIPTION' => :account_description,
      'HOLD REASON KEYS' => :hold_reason_keys,
      'ACCOUNT ADDRESS LINE 1' => :account_address_line_1,
      'ACCOUNT ADDRESS LINE 2' => :account_address_line_2,
      'ACCOUNT CITY' => :account_city,
      'ACCOUNT STATE' => :account_state,
      'ACCOUNT ZIP CODE' => :account_zip
    }
  end

В модели у меня есть

serialize(:column_sequence, Array)
  • 0
    Можем ли мы увидеть публикуемые параметры и сильные параметры на контроллере? Проверка, чтобы убедиться, что передаются правильные данные.
  • 0
    эй крис! как продвигается? Параметр, передаваемый для этого, является только column_sequence. В консоли это выглядит так (с 2 элементами из выбранного массива): lf.column_sequence => "--- \ n- '' \ n- payer_name \ n- account_type \ п»

1 ответ

0
Лучший ответ

Обновить...

переключился на jquery bsmselect, очень похоже

решение заключалось в том, чтобы добавить аргумент к методу load_format_column_sequence_select, передав в текущем порядке (который является массивом строк) внутри метода, проверьте, установлен ли его набор, если он не установлен в пустой массив. Затем установите пустой хеш в качестве нового порядка, итерации по текущему массиву порядка строк, чтобы изменить порядок исходного списка, чтобы он соответствовал порядку столбца. (Должен дать моему сотруднику кредит для этого).

def load_format_column_sequence_select(current_order)
    current_order ||= []
    original_order = {
      :external_key => 'EXTERNAL KEY',
      :external_code => 'EXTERNAL CODE',
      :account_type => 'ACCOUNT TYPE',
      .........



    }

    new_order = {}

    current_order.each do |column_key|
      column_key = column_key.to_sym
      if column_name = original_order.delete(column_key)
        new_order[column_key] = column_name
      end
    end
    new_order.merge(original_order)

  end

и в форме.... (передается @load_format.column_sequence - массив строк, сохраняемых в db)

 = form.fields_for(@load_format) do |builder|
        = builder.label "Column Sequence"
        = collection_select(:load_format, :column_sequence, load_format_column_sequence_select(@load_format.column_sequence), :first, :last,  {}, {:multiple => true})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню