2017-05-18 4 views
-1

Ruby on RailsとSQliteを学習しています。データベースにデータを挿入する際のオフセットとリミットの使用方法

Classroom.all.each_with_index do |classroom, i| 
    classroom.students << [Student.limit(8).offset(i*2)] 
end 

私はそれは教室で学生を挿入しているが、limitoffsetが何をしているか理解していないことを理解:私はシードファイルを作成するために回避する方法を見ていた間、私は、シードファイルのためのいくつかの興味深いのコードを見て。

私はこれをオンラインで検索しようとしましたが、https://apidock.com/rails/ActiveRecord/QueryMethods/offsetが見つかりましたが、何もわかりませんでした。

私がこれについての情報やこれを理解するのに役立つ例についての情報があれば、何か提案がありますか?

+0

[ask]とリンク先のページをお読みください。私たちにオフサイトのリソースをお勧めしているので、あなたの質問は話題にはなりません。 "[どのくらいの研究努力がStack Overflowユーザーに期待されていますか?](http://meta.stackoverflow.com/questions/261592)"あなたは私たちにあなたのためにそれをするように求めるのではなく、研究をする必要があります。 –

答えて

1

確かに(詳細はhttp://guides.rubyonrails.org/active_record_querying.htmlを参照)が

Student SQLクエリはStudentテーブルからすべての行を取得することを意味します。

limitoffsetのようなこれらのメソッドは、Railsが構築している基本的なSQLクエリを変更するものです。

limit(8)は、8項目を取得するという意味です。

offset(i*2)は、i * 2の要素をリストから削除することを意味します。

それは、このコードはそれでバグを持っている場合、私は疑問に思う注

student[i*2..i*2+8-1]

を言うようなことばかり配列(およびないデータベーステーブル)であった場合は? offset(i*8)が理にかなっています。次に、このコードは8人の学生のグループをとり、それらを別のクラスに入れます。

これは最初の8人の生徒が最初の教室に入り、3~10人の生徒を受け入れて次のクラスに入れられるので、一部の生徒は最大4つの異なるクラスになります!

+0

ありがとうございました。今は本当に意味があります。 –

関連する問題