決して使用Something.all.first
せず、代わりに使用することが重要Something.first
です。前者は、テーブル内のすべてのレコードをメモリにロードし、最初のレコードを取得して残りを破棄します。後者は最初のレコードをロードします。大きなテーブルでは、Rails プロセスが数ギガバイトのメモリを占有すると、非常に深刻な問題が発生します。
複数の Number レコードを選択する場合は、次のようにします。
numbers = Number.find_all_by_id([ 0, 4 ])
numbers.each do |number|
number.something = something
number.save
end
これを行うより高度な方法は次のとおりです。
Number.update_all({ :something_id => something.id }, { :id => [ 0, 4 ] })
レンダリングされたクエリを常に見て、log/development.log
ActiveRecord が呼び出しをどのように解釈するかを理解してください。結果は、特に初心者にとっては驚くべきものになる可能性があります。
関係とは、何かを数えるというhas_many
ことを意味します。また、操作が必要な列がbelongs_to
Number にあることも意味します。something_id
この例では Number レコードへの保存を行っていないため、正しく関連付けられない可能性があります。Rails 3 はこれを Rails 2 よりもはるかにうまく処理し、期待どおりに動作すると思います。
重要なデータセットに対してアプリケーションを常にテストすることを忘れないでください。all
ページネーションを正しく処理し、呼び出しなどのミスが開発サイクルの非常に早い段階で明らかになるように、十分な量の偽のテスト データを生成します。
安全に使用できる唯一のケースall
は、リスト内のアイテムの数が許容できるほど少ないことが絶対に確実な場合です。これは、ユーザー提供のデータの場合はほとんどありません。ユーザーがリストに 1,000 個のアイテムを持つことができる場合、そのうちの 1 つがおそらくそうなるでしょう。