【发布时间】:2012-02-24 03:46:57
【问题描述】:
我将我缺乏知识的原因归结为我在 irb 中不断调整的这段代码。 我正在尝试使用 jQuery 的 UI Sortable 将帖子发送到数据库,到目前为止,我可以让它发送更新,但它一次发送整个数组而不是每个数组项。 令人惊讶的是,我还没有找到有人尝试 Sinatra 和 Sortable 的帖子。嗯
哈希和 sinatra 代码
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 基本的东西。
下面是我最终想克隆到 Sinatra 的 Rails 等价物,但那里也有一些小问题,
.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[]=>value 所以我猜输出会是,使用更简单的设置
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
更新
在 Sinatra 中,我试图在这种情况下保存 datafilenumber,例如
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
【问题讨论】:
-
这个应该输出什么?您有 Rails 等价物,但我没有看到您的 Sinatra 尝试与 Rails 示例之间的关系。
-
我已经更新了上面的帖子底部的输出
标签: ruby sinatra jquery-ui-sortable