変数が存在しない場合に変数を設定するために、アプリケーションコントローラーメソッドでよく使用されるまたは等しい||=を見てきました。Railscasts 270の最新版です。しかし、質問があります。たとえば、このヘルパーメソッドを取り上げます。
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
私の理解では、@ current_userは、まだ存在しない場合に設定されます。これは、レールがデータベースに送信されたり、パフォーマンスが向上したりする必要がないことを意味します。
ただし、@current_userのスコープについては混乱しています。私たちのウェブサイトのユーザーが2人いるとしましょう。最初のもの(彼を「bob」と呼びましょう)がサイトに来て、@current_userを彼のユーザーオブジェクトに設定します。2番目のオブジェクト( "john")が入って、railsが@current_userを要求すると、ユーザーオブジェクトがまだbobではないのはなぜですか?結局のところ、bobがサイトにヒットしたときに@current_userがすでに一度設定されているので、変数は存在しますか?
混乱している。