0

私にとって、これは.reverse対についてです.order('id DESC')

私が持っている場合

history = where(user_id: user).order('id DESC')

私はまだ次のような別のクエリを実行できますhistory.where(person_id: person)

私が持っている場合

history = where(user_id: user).reverse

私は得る:NoMethodError: undefined method 'where' for #<Array:0x000001031a3408>

これは、これらの関数が使用する配列タイプ(連想配列と通常の配列)によって異なるためですか?私のオプションは何ですか?

4

2 に答える 2

3

ActiveRecordクエリメソッドwhere、、、orderなどjoins)は。を返しますActiveRecord::Relation。これにより、メソッドをチェーンしてクエリを作成でき、実際のデータを使用するまでクエリは実行されません。

はクエリメソッドではないためreverse、Rubyの実際のデータを操作するため、Rubyがデータを操作できるようにクエリが実行され、が返されますArray。現在、データは(の形式でArray)のみであり、はないためActiveRecord::Relation、別のクエリメソッドを呼び出すことはできません。

于 2012-04-14T17:09:09.480 に答える
2

reverseはactiverecordクエリインターフェイスの外部のメソッドorderですが、はインターフェイスの中にあります。を実行するreverseと、リソースはなくなりますが、配列ができます。where出力を逆にする前に、SQLメソッド(など)を実行する必要があります。

于 2012-04-14T17:07:35.527 に答える