Я использую 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)
Обновить...
переключился на 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})