2017-04-06 20 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'です。この文は、データベースがソートされたもので更新されるべきであることを意味します( '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 > 
関連する問題