1

ActiveRecord@gridがあります。

ハッシュ@numbersがあります。

Railsコンソール

    1.9.3p385 :086 > Grids
     => Grids(unique_id: integer, price: float, availability: string,
     delivery: string, delivery_time: string, delivery_cost: float, 
     special_offers: text, warranty: text, created_at: datetime, updated_at: datetime) 


    => @numbers
    =>{7=>114, 9=>21, 12=>7, 13=>31, 14=>51, 16=>43, 18=>48, 21=>6, 22=>18, 
       24=>69, 27=>47, 30=>47, 32=>31, 33=>36} 

@numbersハッシュはunique_id=>クリック数に他なりません

1.9.3p385 :091 > @no =  @numbers.sort_by{|k,v| v}.reverse.map{|i| i[0]} 
              => [7, 24, 14, 18, 30, 27, 16, 33, 13, 32, 9, 22, 12, 21]

@noはunique_idの配列です。

@grid = Grid.all

@grid is an activeRecord, I want to sort this active record based 
on the order of @no which is nothing but the unique_id in @grid.

私はこれを試しています、

@grid.sort_by{ |h| @no.index(h.unique_id) }

それは機能していません、それは言います、

ArgumentError:NilClassと14の比較に失敗しました

いくつかの比較が行われていることを理解しています。これを無視する方法、またはより良いアプローチはありますか?

4

3 に答える 3

2

最初にidでインデックス付けされたグリッド関係からハッシュを作成し、次にこのインデックスのルックアップからマッピングを実行します。

grid_index = @grid.index_by &:id
@no.map{|id| grid_index[id] } # possibly compact the resulting array after that
于 2013-03-12T09:33:04.217 に答える
1

持っていないものが@grid含まれているために発生します。unique_id@no

交換

@grid = Grid.all

@grid = Grid.all(:conditions=>["unique_id in (?)",@no])

それで

@grid.sort_by{ |h| @no.index(h.unique_id) }
于 2013-03-12T09:32:48.173 に答える
0

試す:

@grid.where(:unique_id => @no).map(&:unique_id)
于 2013-03-12T09:52:40.803 に答える