第八章中
def log_in(user) session[:user_id] = user.id end
利用這個輔助方法 session
接著會在首頁中調用
def current_user @current_user ||= User.find_by(id: session[:user_id]) end
教學中是這樣寫:
这样定义应该可以,不过如果页面中多次调用 current_user,就会多次查询数据库。所以,我们要使用一种 Ruby 习惯写法,把 User.find_by 的结果存储在实例变量中,只在第一次调用时查询数据库,后续再调用直接返回实例变量中存储的值:[5]
不過我發現每次瀏覽首頁的時候 (首頁有調用 current_user) 還是會去查詢數據庫。(rails server log)。
确定是首页调用 current_user 造成查询的,我将首页的 current_user 注解掉,导轨服务器日志就没有查询资料库的记录了
我的理解是@current_user应该会存东西,不过我把他手看跌 @current_user.to_s 发现他没存。所以每次到首页的时候还是会浏览查一次数据库。
请各位前辈解惑感谢。