Я ограничил свое отсутствие знаний этим фрагментом, который я продолжаю настраивать в irb.
Я пытаюсь использовать пользовательский интерфейс jQuery Sortable для отправки сообщения в базу данных, поэтому я могу заставить его отправлять обновление, но одновременно отправляет весь массив вместо каждого элемента массива.
Удивительно, что я еще не нашел ни одного поста с кем-то, кто пробовал Синатру и Сортабле. Ммм
Код хеша и синатры
superslide = {"weee"=>["3", "4", "1", "2"]}
moo = Sort.all
moo.each do |o|
o.sortorder = superslide['weee']
puts o.sortorder
end
#Output
3412
3412
3412
3412
Вы можете видеть, как он группирует значения массивов в одну строку для каждого цикла. Я знаю, что в Ruby есть элементарная вещь, по которой я скучаю.
Ниже приведен эквивалент Rails, который я в конечном итоге хотел бы клонировать в Sinatra, но там тоже есть мелочи,
.index(book.id.to_s) + 1
выдает ошибку, я думаю, поскольку это строка, я пытался to_i, но она просто редактирует ту же группу чисел.
код Rails для перевода
def sort
@books = Book.all
@books.each do |book|
book.position = params['book'].index(book.id.to_s) + 1
book.save
end
http://practiceovertheory.com/blog/2009/08/07/sortable-lists-with-jquery-in-rails/
Я также тестировал итерацию массива в хэше следующим образом: простите за разные имена, у меня есть множество тестовых маршрутов, которые я сейчас не могу найти с помощью тестового кода.
slideNum.sortorder = params['slide'].each do |k,v|
k.each { |x| puts x }
end
jQuery Сортируемый, если вам это нужно
var foo = $( "#sortable" ).sortable({
update: function(event, ui){
$.ajax({
type: 'post',
// data: $('#books').sortable('serialize'),
data: foo.sortable("serialize",{key:'bunny[]'}),
dataType: 'script',
url: '/sort'
});
},
change: function(){console.log(foo.sortable("serialize",{key:'bunny[]'}))}
});
Необходимый вывод, я полагаю.
Я хочу, чтобы он запустил свой метод обновления и сохранил значение hash => key [] =>
Поэтому я думаю, что результат будет, используя еще более простую настройку
superslide = {"weee"=>["3", "4", "1", "2"]}
superslide.each do |o|
ai = superslide['weee']
puts ai
puts "event"
end
Требуемый вывод
3
event
4
event
2
event
1
event
Ток не нужен вывод
Instead of
3
4
2
1
event
Обновление
В Синатре я пытаюсь сохранить номер файла данных в этом случае как
datafilenumber.save = wee[0] # =1
datafilenumber.save = wee[1] # =2
etc…
обновленный тест
superslide = {"weee"=>["3", "4", "1", "2"]}
superslide.each do |o|
ai = superslide['weee']
datafilenumber = ai.each {|x| "#{x}"}
puts "box + #{datafilenumber}"
end
#Outputs
box + 3412
Путь Синатры
В настоящее время выводит числа и сохраняет их в базе данных, но с одинаковым номером, поэтому все слайды становятся одним значением. Приближается!
post '/sort' do
sortall = Sort.all
slidevar = params['slide']
slidevar.each do |k,v|
k.each do |x|
sortall.update(:sortorder => x)
puts x
puts v.object_id
end
end
end
Тестирование с проверкой и классом
slidevar = params['slide']
puts params.inspect # {"slide"=>["3", "2", "1", "4"]}
puts params.class # Hash
puts slidevar.inspect # ["3", "2", "1", "4"]
puts slidevar.class # Array