6番目のインデックスから6つの要素を取得する必要がある場合、Model.limit(6).offset(5)
の理由を理解できません。私たちは、最初に要素の取得を開始しなければならないインデックスを指定してから、limitに引数として渡された要素の数に検索を制限しなければならないので、Model.offset(5).limit(6)
である必要があると思います。Model.offset()。limit()とModel.limit()の相違点offset()
0
A
答えて
0
2つは同等です。 SQLはActiveRecordによって評価され、その結果を得ると、ActiveRecordによって生成されます。
[1] pry(main)> User.offset(6).limit(5).to_sql
=> "SELECT `users`.* FROM `users` LIMIT 5 OFFSET 6"
[2] pry(main)> User.limit(5).offset(6).to_sql
=> "SELECT `users`.* FROM `users` LIMIT 5 OFFSET 6"
0
あなたの質問に記載された両方のケースで生成されたSQLクエリは同じであるため、彼らは同じ結果を生成:生成されますSQLを見て.to_sql
を使用してください。したがって、基本的に同じモデルに対してオフセットとリミットを使用する順序に違いはありません。
>> Model.offset(5).limit(6).pluck(:id)
# SELECT `model`.`id` FROM `model` LIMIT 6 OFFSET 5
# [6, 7, 8, 9, 10, 11]
>> Model.limit(6).offset(5).pluck(:id)
# SELECT `model`.`id` FROM `model` LIMIT 6 OFFSET 5
# [6, 7, 8, 9, 10, 11]
3
あなたは誤ってチェーンレールの順序が重要であると考えていますか?実際、そうではありません。 実際の実行メソッドが呼び出されない限り、すべてのこれらの方法は、単に準備されている内部クエリを変更する:1はeach
のように、実行メソッドを呼び出していない限り順番だけで、問題ではない、と述べた
> User.limit(6).class
#⇒ User::FriendlyIdActiveRecordRelation
> User.offset(5).class
#⇒ User::FriendlyIdActiveRecordRelation
(直接、またはto_a
,map
などのような方法またはpluck
のような方法を介して)。
> User.limit(6).offset(5).to_sql
#⇒ "SELECT `users`.* FROM `users` LIMIT 6 OFFSET 5"
> User.offset(5).limit(6).to_sql
#⇒ "SELECT `users`.* FROM `users` LIMIT 6 OFFSET 5"
関連する問題
- 1. Oracle 11GのLIMIT/OFFSET
- 2. Apache Phoenix LIMIT OFFSETエラー
- 3. IE標準、相違点および相違点の相違点
- 4. importとconstとの相違点とcommonjsでの相違点
- 5. =と:=の相違点
- 6. PHPUnitとPHPSpecの相違点と相違点
- 7. mysqlでLIMITなしのOFFSET
- 8. Openlink Virtuoso SPARQL OFFSETとLIMITの動作
- 9. CBUUIDとNSUUIDの相違点
- 10. NSTimeZoneとGMTの相違点
- 11. ListViewとArrayListの相違点
- 12. pictureBox.Update()とpictureBox.Refresh()の相違点
- 13. ApplicationContextInitializerとBeanFactoryPostProcessorの相違点
- 14. システムとshell_execの相違点
- 15. AsyncSocketとAsyncUdpSocketの相違点
- 16. .textと.get_text()の相違点
- 17. plt.close()とplt.clf()の相違点
- 18. `BeginSubscribeToStreamingNotifications`と` SubscribeToStreamingNotifications`の相違点
- 19. Delegate.InvokeとDelegateの相違点
- 20. InternalResourceViewResolverとUrlBasedViewResolverの相違点
- 21. tf.nn.convolutionとtf.nn.conv2dの相違点
- 22. Backbone.Layout.extendとBackbone.view.extendの相違点
- 23. JavaとMacOSの相違点
- 24. Yocto:CORE_IMAGE_EXTRA_INSTALLとIMAGE_INSTALLの相違点
- 25. window.someRandomVarとsomeRandomVarの相違点
- 26. CDRとxDRの相違点
- 27. gst_bus_add_watch()とg_signal_connect()の相違点
- 28. EventStreamとEventBusの相違点
- 29. System.Threading.Tasks.DataflowとMicrosoft.Tpls.Dataflowの相違点
- 30. mkfifo()とmknod()の相違点
'all'はクエリをトリガしません。 「each」はそうです。 –
本当に、地球上の「すべて」はなぜそうではないのですか?クエリーをトリガーすることなく関係に 'all'を呼び出す理由は何でしょうか? Railsは吸う。 – mudasobwa
これは、後でカスタマイズするための「空の」クエリを取得する方法です。 'products = Product.all; products = products.where(query1)if cond1; products = products2.where(query2)if cond2'など。実際には、関係上の '.all'は何を意味するのかはあいまいです。 「この基準に適合するすべてのアイテムを入手してください」または「以前のすべての基準を無視してすべてのレコードを取得しますか? –