2017-04-06 174 views
0

我有一個數據庫,我需要按整個表的長度對整個表進行排序,但是我有堆棧。在DataMapper中對元素進行排序

require 'dm-core' 
require 'dm-migrations' 
require 'sinatra/reloader' 

DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db") 

class Item 
    include DataMapper::Resource 

    property :id, Serial 
    property :length, Integer 
end 

... 

DataMapper.finalize 

post '/items/sort/?' do 
5.times do 
    val = rand(100) 
    Item.create(length: val) 
    end 

    Item.update(Item.sort_by { |_key, value| value }) 
    redirect to('/items') 
end 

我怎樣才能正確地執行它,這樣我的數據庫將更新與length要素排序?謝謝。

+0

您想要做什麼? 'Item.update(Item.sort_by {| _key,value | value})'語句的含義是什麼? – marmeladze

+0

用id長度對填充數據庫後,現在我想按照長度對此表進行排序。例如,在我的表中有'@ id = 1,@ length = 3','@ id = 2,@ length = 2','@ id = 3,@ length = 4',我想要一個'@ @ id = 2,@ length = 2','@ id = 1,@ length = 3','@ id = 3,length = 4',所以只需用'length'參數對它們進行排序。該語句意味着數據庫應該使用排序後的數據更新自己(假設它代表'id => length'哈希中的所有內容)。 – NLis

回答

0
Item.sort_by(&:length) 

上面的代碼將幫助您達到預期的效果。

2.3.1 :001 > require './app.rb' 
=> true 
2.3.1 :002 > Item.all 
=> [#<Item @id=1 @length=21>, #<Item @id=2 @length=85>, #<Item @id=3 @length=41>, #<Item @id=4 @length=71>, #<Item @id=5 @length=71>] 
2.3.1 :003 > Item.sort_by(&:length) 
=> [#<Item @id=1 @length=21>, #<Item @id=3 @length=41>, #<Item @id=4 @length=71>, #<Item @id=5 @length=71>, #<Item @id=2 @length=85>] 
2.3.1 :004 > 
相關問題