迭代Datamapper获取更新单个行

时间:2012-02-24 19:54:29

标签: sinatra datamapper

尝试itterate get()

或者我认为这就是我想要的。我选择每一行并将它的Sort.sortorder更改为数组值,所以我想要

   sqlite> select * from sorts;
    515|1|2012-02-24T14:44:07-05:00
    516|2|2012-02-24T14:44:07-05:00
    517|3|2012-02-24T14:44:07-05:00
    518|4|2012-02-24T14:44:07-05:00
    sqlite> 

使用带有Sinatra的racksh测试代码到目前为止归结为

adkjsd = [1,2,3,4]

adkjsd.each do |jk|
  puts jk + 1
  Sort.all.update(:sortorder => jk) # true updates all rows to 4 the last in the array
  Sort.get(516).update(:sortorder => 0) # only updates that row  
end

Sort.all.update(:sortorder => jk) # true updates all rows to 4 the last in the array
#output
sqlite> select * from sorts;
515|4|2012-02-24T14:44:07-05:00
516|4|2012-02-24T14:44:07-05:00
517|4|2012-02-24T14:44:07-05:00
518|4|2012-02-24T14:44:07-05:00
sqlite> 

Sort.get(516).update(:sortorder => 0) # only updates that row
#output
sqlite> select * from sorts;
515|4|2012-02-24T14:44:07-05:00
516|0|2012-02-24T14:47:03-05:00
517|4|2012-02-24T14:44:07-05:00
518|4|2012-02-24T14:44:07-05:00
sqlite> 

1 个答案:

答案 0 :(得分:0)

也许这就是你想要的?

adkjsd = [1,2,3,4]
Sort.all.each_with_index do |sort, i|
  sort.sortorder = adkjsd[i]
  sort.save
end

我仍然在那里使用数组,因为我不知道你试图设置的值是否总是相同的。如果它只是从一个行开始到行数,你可以这样做:

Sort.all.each_with_index do |sort, i|
  sort.sortorder = i + 1
  sort.save
end