1

where句を実行するたびに、結果から実際のデータにアクセスしようとするまで、クエリは実行されません。とにかく私はそれを自動的に実行させることができますか?

例:

delete_list = Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id)

delete_list が ActiveRecord オブジェクトを保持するようになりました。しかし、次のようなものを実行することなく、結果の配列を保持したい

delete_list.each ...
4

2 に答える 2

1

クエリ全体を熱心にロードするには、.all次のように使用できます。

delete_list = Rom::Leaderboard.where(...).all

これによりdelete_list、配列になります。

于 2013-10-03T18:51:45.203 に答える
0

まあ、削除しようとしているだけなら、すぐに呼び出しdestroy_allたりdelete_all実行したりします

Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id).destroy_all

また

delete_list = Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id)
delete_list.destroy_all

destroy_allとの違いについてはdelete_all

  • destroy_all: 関連するオブジェクトは、destroy メソッドを呼び出すことによって、このオブジェクトと共に破棄されます。これは、各オブジェクトを効果的にループし、それを呼び出しますdestroy。したがって、オブジェクトごとに少なくとも 1 つのクエリがあります。
  • delete_all: 関連するすべてのオブジェクトは、:destroy メソッドを呼び出さずにすぐに破棄されます。delete from leader_boardsこれにより、基本的に where 句を使用して単一のクエリが作成されます。したがって、オブジェクトがいくつあっても、実行されるクエリは 1 つだけです。ただし、関連するオブジェクトはクリーンアップされません。
于 2013-10-03T18:50:36.853 に答える